You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ia...@apache.org on 2014/05/16 22:23:35 UTC

[01/10] android commit: CB-6491 add CONTRIBUTING.md

Repository: cordova-android
Updated Branches:
  refs/heads/pluggable_webview 1a17083e8 -> 97008305f


CB-6491 add CONTRIBUTING.md


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

Branch: refs/heads/pluggable_webview
Commit: 82bba44538f5559b4bc848c34a5e9d55c8b2bb74
Parents: e6adbb0
Author: Marcel Kinard <cm...@gmail.com>
Authored: Wed Apr 30 08:44:21 2014 -0400
Committer: Marcel Kinard <cm...@gmail.com>
Committed: Wed Apr 30 08:44:21 2014 -0400

----------------------------------------------------------------------
 CONTRIBUTING.md | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/82bba445/CONTRIBUTING.md
----------------------------------------------------------------------
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..1594d12
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,16 @@
+# Contributing to Apache Cordova
+
+Anyone can contribute to Cordova. And we need your contributions.
+
+There are multiple ways to contribute: report bugs, improve the docs, and
+contribute code.
+
+For instructions on this, start with the 
+[contribution overview](http://cordova.apache.org/#contribute).
+
+The details are explained there, but the important items are:
+ - Sign and submit an Apache ICLA (Contributor License Agreement).
+ - Have a Jira issue open that corresponds to your contribution.
+ - Run the tests so your patch doesn't break existing functionality.
+
+We look forward to your contributions!


[06/10] android commit: Added dash to test push

Posted by ia...@apache.org.
Added dash to test push


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

Branch: refs/heads/pluggable_webview
Commit: 93c8ba920a27451fbb85afefc52e73569792e65e
Parents: 8702c04
Author: Joe Bowser <bo...@apache.org>
Authored: Thu Apr 3 10:04:28 2014 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Tue May 6 13:59:13 2014 -0700

----------------------------------------------------------------------
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/93c8ba92/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 26ab1e5..8dc2f95 100755
--- a/README.md
+++ b/README.md
@@ -84,7 +84,7 @@ Running Tests
 Please see details under test/README.md.
 
 Further Reading
----
+----
 
 - [http://developer.android.com](http://developer.android.com)
 - [http://cordova.apache.org/](http://cordova.apache.org)


[07/10] android commit: Set VERSION to 3.6.0-dev (via coho)

Posted by ia...@apache.org.
Set VERSION to 3.6.0-dev (via coho)


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

Branch: refs/heads/pluggable_webview
Commit: 00caa1c0a0f3b51064fbf832b9e646039f41a4b5
Parents: 93c8ba9
Author: Joe Bowser <bo...@apache.org>
Authored: Tue May 6 15:51:14 2014 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Tue May 6 15:51:14 2014 -0700

----------------------------------------------------------------------
 VERSION                                              | 2 +-
 bin/templates/cordova/version                        | 2 +-
 framework/src/org/apache/cordova/CordovaWebView.java | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/00caa1c0/VERSION
----------------------------------------------------------------------
diff --git a/VERSION b/VERSION
index 414a102..86bab9c 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-3.5.0-dev
+3.6.0-dev

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/00caa1c0/bin/templates/cordova/version
----------------------------------------------------------------------
diff --git a/bin/templates/cordova/version b/bin/templates/cordova/version
index 4250850..ac3bb54 100755
--- a/bin/templates/cordova/version
+++ b/bin/templates/cordova/version
@@ -20,6 +20,6 @@
 */
 
 // Coho updates this line:
-var VERSION = "3.5.0-dev";
+var VERSION = "3.6.0-dev";
 
 console.log(VERSION);

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/00caa1c0/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 b0e3d43..9e98ac6 100755
--- a/framework/src/org/apache/cordova/CordovaWebView.java
+++ b/framework/src/org/apache/cordova/CordovaWebView.java
@@ -68,7 +68,7 @@ import android.widget.FrameLayout;
 public class CordovaWebView extends WebView {
 
     public static final String TAG = "CordovaWebView";
-    public static final String CORDOVA_VERSION = "3.5.0-dev";
+    public static final String CORDOVA_VERSION = "3.6.0-dev";
 
     private ArrayList<Integer> keyDownCodes = new ArrayList<Integer>();
     private ArrayList<Integer> keyUpCodes = new ArrayList<Integer>();


[09/10] android commit: Update JS snapshot to version 3.6.0-dev (via coho)

Posted by ia...@apache.org.
Update JS snapshot to version 3.6.0-dev (via coho)


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

Branch: refs/heads/pluggable_webview
Commit: 50c4aef87328c9c932bcee869fc1691a259806da
Parents: cf42d31
Author: Steven Gill <st...@gmail.com>
Authored: Thu May 8 15:32:28 2014 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Thu May 8 15:32:28 2014 -0700

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


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/50c4aef8/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index c09cc42..ed621c7 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
 // Platform: android
-// 3.6.0-dev-eb7268f
+// 3.6.0-dev-7e845f3
 /*
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
@@ -19,7 +19,7 @@
  under the License.
 */
 ;(function() {
-var CORDOVA_JS_BUILD_LABEL = '3.6.0-dev-eb7268f';
+var CORDOVA_JS_BUILD_LABEL = '3.6.0-dev-7e845f3';
 // file: src/scripts/require.js
 
 /*jshint -W079 */


[03/10] android commit: CB-6552: updated test field

Posted by ia...@apache.org.
CB-6552: updated test field


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

Branch: refs/heads/pluggable_webview
Commit: 3d4b8ce99ba21236dff1cdd43076391d507f499a
Parents: 64fd871
Author: Steven Gill <st...@gmail.com>
Authored: Wed Apr 30 11:59:29 2014 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Wed Apr 30 11:59:29 2014 -0700

----------------------------------------------------------------------
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/3d4b8ce9/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index d3e153a..fd641c8 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
   "description": "This is the release for cordova-android",
   "main": "bin/create",
   "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1"
+    "test":"echo \"Error: please view test/readme.md\" && exit 1" 
   },
   "repository": {
     "type": "git",


[04/10] android commit: CB-6552: updated author to apache software foundation in pacakge.json

Posted by ia...@apache.org.
CB-6552: updated author to apache software foundation in pacakge.json


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

Branch: refs/heads/pluggable_webview
Commit: c349892c5b6a5311cf404b39fe004ed19dfb35c9
Parents: 3d4b8ce
Author: Steven Gill <st...@gmail.com>
Authored: Wed Apr 30 12:55:28 2014 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Wed Apr 30 12:55:28 2014 -0700

----------------------------------------------------------------------
 package.json | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/c349892c/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index fd641c8..0d203c9 100644
--- a/package.json
+++ b/package.json
@@ -1,20 +1,18 @@
 {
   "name": "cordova-android",
   "version": "3.4.0",
-  "description": "This is the release for cordova-android",
+  "description": "cordova-android release",
   "main": "bin/create",
-  "scripts": {
-    "test":"echo \"Error: please view test/readme.md\" && exit 1" 
-  },
   "repository": {
     "type": "git",
     "url": "https://git-wip-us.apache.org/repos/asf/cordova-android.git"
   },
   "keywords": [
     "android",
-    "cordova"
+    "cordova",
+    "apache"
   ],
-  "author": "Joe Bowser",
+  "author": "Apache Software Foundation",
   "license": "Apache version 2.0",
   "dependencies": {
     "q": "^0.9.0",


[02/10] android commit: CB-6552: added top level package.json

Posted by ia...@apache.org.
CB-6552: added top level package.json


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

Branch: refs/heads/pluggable_webview
Commit: 64fd87134fcb60280e816449704f386bd979ce8b
Parents: 82bba44
Author: Steven Gill <st...@gmail.com>
Authored: Wed Apr 30 10:54:47 2014 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Wed Apr 30 10:54:58 2014 -0700

----------------------------------------------------------------------
 package.json | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/64fd8713/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..d3e153a
--- /dev/null
+++ b/package.json
@@ -0,0 +1,23 @@
+{
+  "name": "cordova-android",
+  "version": "3.4.0",
+  "description": "This is the release for cordova-android",
+  "main": "bin/create",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://git-wip-us.apache.org/repos/asf/cordova-android.git"
+  },
+  "keywords": [
+    "android",
+    "cordova"
+  ],
+  "author": "Joe Bowser",
+  "license": "Apache version 2.0",
+  "dependencies": {
+    "q": "^0.9.0",
+    "shelljs": "^0.2.6"
+  }
+}


[10/10] android commit: Merge branch 'master' into pluggable_webview

Posted by ia...@apache.org.
Merge branch 'master' into pluggable_webview

Conflicts:
	framework/src/org/apache/cordova/CordovaWebView.java


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

Branch: refs/heads/pluggable_webview
Commit: 97008305fffce0420270ca120ea65a85dc0b5858
Parents: 1a17083 50c4aef
Author: Ian Clelland <ic...@chromium.org>
Authored: Thu May 15 15:59:11 2014 -0400
Committer: Ian Clelland <ic...@chromium.org>
Committed: Thu May 15 15:59:11 2014 -0400

----------------------------------------------------------------------
 CONTRIBUTING.md                                 |  16 +++
 NOTICE                                          |  16 ++-
 README.md                                       |   2 +-
 VERSION                                         |   2 +-
 bin/templates/cordova/version                   |   2 +-
 framework/assets/www/cordova.js                 | 110 ++++++++++++++++++-
 .../src/org/apache/cordova/AndroidWebView.java  |   2 +-
 package.json                                    |  21 ++++
 8 files changed, 163 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/97008305/framework/src/org/apache/cordova/AndroidWebView.java
----------------------------------------------------------------------
diff --cc framework/src/org/apache/cordova/AndroidWebView.java
index 6f73dbf,0000000..be2f968
mode 100755,000000..100755
--- a/framework/src/org/apache/cordova/AndroidWebView.java
+++ b/framework/src/org/apache/cordova/AndroidWebView.java
@@@ -1,1096 -1,0 +1,1096 @@@
 +/*
 +       Licensed to the Apache Software Foundation (ASF) under one
 +       or more contributor license agreements.  See the NOTICE file
 +       distributed with this work for additional information
 +       regarding copyright ownership.  The ASF licenses this file
 +       to you under the Apache License, Version 2.0 (the
 +       "License"); you may not use this file except in compliance
 +       with the License.  You may obtain a copy of the License at
 +
 +         http://www.apache.org/licenses/LICENSE-2.0
 +
 +       Unless required by applicable law or agreed to in writing,
 +       software distributed under the License is distributed on an
 +       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 +       KIND, either express or implied.  See the License for the
 +       specific language governing permissions and limitations
 +       under the License.
 +*/
 +
 +package org.apache.cordova;
 +
 +import java.lang.reflect.InvocationTargetException;
 +import java.lang.reflect.Method;
 +import java.util.ArrayList;
 +import java.util.HashMap;
 +import java.util.Locale;
 +
 +import org.apache.cordova.Config;
 +import org.apache.cordova.CordovaInterface;
 +import org.apache.cordova.LOG;
 +import org.apache.cordova.PluginManager;
 +import org.apache.cordova.PluginResult;
 +import org.json.JSONException;
 +
 +import android.annotation.SuppressLint;
 +import android.annotation.TargetApi;
 +import android.content.BroadcastReceiver;
 +import android.content.Context;
 +import android.content.Intent;
 +import android.content.IntentFilter;
 +import android.content.pm.ApplicationInfo;
 +import android.content.pm.PackageManager;
 +import android.content.pm.PackageManager.NameNotFoundException;
 +import android.net.Uri;
 +import android.os.Build;
 +import android.os.Bundle;
 +import android.util.AttributeSet;
 +import android.util.Log;
 +import android.view.Gravity;
 +import android.view.KeyEvent;
 +import android.view.View;
 +import android.view.ViewGroup;
 +import android.view.WindowManager;
 +import android.view.inputmethod.InputMethodManager;
 +import android.webkit.WebBackForwardList;
 +import android.webkit.WebHistoryItem;
 +import android.webkit.WebChromeClient;
 +import android.webkit.WebSettings;
 +import android.webkit.WebView;
 +import android.webkit.WebSettings.LayoutAlgorithm;
 +import android.webkit.WebViewClient;
 +import android.widget.FrameLayout;
 +
 +/*
 + * This class is our web view.
 + *
 + * @see <a href="http://developer.android.com/guide/webapps/webview.html">WebView guide</a>
 + * @see <a href="http://developer.android.com/reference/android/webkit/WebView.html">WebView</a>
 + */
 +public class AndroidWebView extends WebView implements CordovaWebView {
 +
 +    public static final String TAG = "CordovaWebView";
-     public static final String CORDOVA_VERSION = "3.5.0-dev";
++    public static final String CORDOVA_VERSION = "3.6.0-dev";
 +
 +    private ArrayList<Integer> keyDownCodes = new ArrayList<Integer>();
 +    private ArrayList<Integer> keyUpCodes = new ArrayList<Integer>();
 +
 +    PluginManager pluginManager;
 +    private boolean paused;
 +
 +    private BroadcastReceiver receiver;
 +
 +
 +    /** Activities and other important classes **/
 +    private CordovaInterface cordova;
 +    CordovaWebViewClient viewClient;
 +    @SuppressWarnings("unused")
 +    private CordovaChromeClient chromeClient;
 +
 +    private String url;
 +
 +    // Flag to track that a loadUrl timeout occurred
 +    int loadUrlTimeout = 0;
 +
 +    private boolean bound;
 +
 +    private boolean handleButton = false;
 +    
 +    private long lastMenuEventTime = 0;
 +
 +    NativeToJsMessageQueue jsMessageQueue;
 +    ExposedJsApi exposedJsApi;
 +
 +    /** custom view created by the browser (a video player for example) */
 +    private View mCustomView;
 +    private WebChromeClient.CustomViewCallback mCustomViewCallback;
 +
 +    private ActivityResult mResult = null;
 +
 +    private CordovaResourceApi resourceApi;
 +
 +    class ActivityResult {
 +        
 +        int request;
 +        int result;
 +        Intent incoming;
 +        
 +        public ActivityResult(int req, int res, Intent intent) {
 +            request = req;
 +            result = res;
 +            incoming = intent;
 +        }
 +
 +        
 +    }
 +    
 +    static final FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER =
 +            new FrameLayout.LayoutParams(
 +            ViewGroup.LayoutParams.MATCH_PARENT,
 +            ViewGroup.LayoutParams.MATCH_PARENT,
 +            Gravity.CENTER);
 +    
 +    
 +    /**
 +     * Constructor.
 +     *
 +     * @param context
 +     */
 +    public AndroidWebView(Context context) {
 +        super(context);
 +        if (CordovaInterface.class.isInstance(context))
 +        {
 +            this.cordova = (CordovaInterface) context;
 +        }
 +        else
 +        {
 +            Log.d(TAG, "Your activity must implement CordovaInterface to work");
 +        }
 +        this.loadConfiguration();
 +        this.setup();
 +    }
 +
 +    /**
 +     * Constructor.
 +     *
 +     * @param context
 +     * @param attrs
 +     */
 +    public AndroidWebView(Context context, AttributeSet attrs) {
 +        super(context, attrs);
 +        if (CordovaInterface.class.isInstance(context))
 +        {
 +            this.cordova = (CordovaInterface) context;
 +        }
 +        else
 +        {
 +            Log.d(TAG, "Your activity must implement CordovaInterface to work");
 +        }
 +        this.loadConfiguration();
 +        this.setup();
 +    }
 +
 +    /**
 +     * Constructor.
 +     *
 +     * @param context
 +     * @param attrs
 +     * @param defStyle
 +     *
 +     */
 +    public AndroidWebView(Context context, AttributeSet attrs, int defStyle) {
 +        super(context, attrs, defStyle);
 +        if (CordovaInterface.class.isInstance(context))
 +        {
 +            this.cordova = (CordovaInterface) context;
 +        }
 +        else
 +        {
 +            Log.d(TAG, "Your activity must implement CordovaInterface to work");
 +        }
 +        this.loadConfiguration();
 +        this.setup();
 +    }
 +
 +    /**
 +     * Constructor.
 +     *
 +     * @param context
 +     * @param attrs
 +     * @param defStyle
 +     * @param privateBrowsing
 +     */
 +    @TargetApi(11)
 +    public AndroidWebView(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
 +        super(context, attrs, defStyle, privateBrowsing);
 +        if (CordovaInterface.class.isInstance(context))
 +        {
 +            this.cordova = (CordovaInterface) context;
 +        }
 +        else
 +        {
 +            Log.d(TAG, "Your activity must implement CordovaInterface to work");
 +        }
 +        this.loadConfiguration();
 +        this.setup();
 +    }
 +
 +    /**
 +     * Create a default WebViewClient object for this webview. This can be overridden by the
 +     * main application's CordovaActivity subclass.
 +     *
 +     * There are two possible client objects that can be returned:
 +     *   AndroidWebViewClient for android < 3.0
 +     *   IceCreamCordovaWebViewClient for Android >= 3.0 (Supports shouldInterceptRequest)
 +     */
 +    @Override
 +    public CordovaWebViewClient makeWebViewClient() {
 +        if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB)
 +        {
 +            return (CordovaWebViewClient) new AndroidWebViewClient(this.cordova, this);
 +        }
 +        else
 +        {
 +            return (CordovaWebViewClient) new IceCreamCordovaWebViewClient(this.cordova, this);
 +        }
 +    }
 +
 +    /**
 +     * Create a default WebViewClient object for this webview. This can be overridden by the
 +     * main application's CordovaActivity subclass.
 +     */
 +    @Override
 +    public CordovaChromeClient makeWebChromeClient() {
 +        return (CordovaChromeClient) new AndroidChromeClient(this.cordova);
 +    }
 +
 +    /**
 +     * Initialize webview.
 +     */
 +    @SuppressWarnings("deprecation")
 +    @SuppressLint("NewApi")
 +    private void setup() {
 +        this.setInitialScale(0);
 +        this.setVerticalScrollBarEnabled(false);
 +        if (shouldRequestFocusOnInit()) {
 +			this.requestFocusFromTouch();
 +		}
 +		// Enable JavaScript
 +        WebSettings settings = this.getSettings();
 +        settings.setJavaScriptEnabled(true);
 +        settings.setJavaScriptCanOpenWindowsAutomatically(true);
 +        settings.setLayoutAlgorithm(LayoutAlgorithm.NORMAL);
 +        
 +        // Set the nav dump for HTC 2.x devices (disabling for ICS, deprecated entirely for Jellybean 4.2)
 +        try {
 +            Method gingerbread_getMethod =  WebSettings.class.getMethod("setNavDump", new Class[] { boolean.class });
 +            
 +            String manufacturer = android.os.Build.MANUFACTURER;
 +            Log.d(TAG, "CordovaWebView is running on device made by: " + manufacturer);
 +            if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB &&
 +                    android.os.Build.MANUFACTURER.contains("HTC"))
 +            {
 +                gingerbread_getMethod.invoke(settings, true);
 +            }
 +        } catch (NoSuchMethodException e) {
 +            Log.d(TAG, "We are on a modern version of Android, we will deprecate HTC 2.3 devices in 2.8");
 +        } catch (IllegalArgumentException e) {
 +            Log.d(TAG, "Doing the NavDump failed with bad arguments");
 +        } catch (IllegalAccessException e) {
 +            Log.d(TAG, "This should never happen: IllegalAccessException means this isn't Android anymore");
 +        } catch (InvocationTargetException e) {
 +            Log.d(TAG, "This should never happen: InvocationTargetException means this isn't Android anymore.");
 +        }
 +
 +        //We don't save any form data in the application
 +        settings.setSaveFormData(false);
 +        settings.setSavePassword(false);
 +        
 +        // Jellybean rightfully tried to lock this down. Too bad they didn't give us a whitelist
 +        // while we do this
 +        if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
 +            Level16Apis.enableUniversalAccess(settings);
 +        // Enable database
 +        // We keep this disabled because we use or shim to get around DOM_EXCEPTION_ERROR_16
 +        String databasePath = this.cordova.getActivity().getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
 +        settings.setDatabaseEnabled(true);
 +        settings.setDatabasePath(databasePath);
 +        
 +        
 +        //Determine whether we're in debug or release mode, and turn on Debugging!
 +        try {
 +            final String packageName = this.cordova.getActivity().getPackageName();
 +            final PackageManager pm = this.cordova.getActivity().getPackageManager();
 +            ApplicationInfo appInfo;
 +            
 +            appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
 +            
 +            if((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0 &&  
 +                android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT)
 +            {
 +                setWebContentsDebuggingEnabled(true);
 +            }
 +        } catch (IllegalArgumentException e) {
 +            Log.d(TAG, "You have one job! To turn on Remote Web Debugging! YOU HAVE FAILED! ");
 +            e.printStackTrace();
 +        } catch (NameNotFoundException e) {
 +            Log.d(TAG, "This should never happen: Your application's package can't be found.");
 +            e.printStackTrace();
 +        }  
 +        
 +        settings.setGeolocationDatabasePath(databasePath);
 +
 +        // Enable DOM storage
 +        settings.setDomStorageEnabled(true);
 +
 +        // Enable built-in geolocation
 +        settings.setGeolocationEnabled(true);
 +        
 +        // Enable AppCache
 +        // Fix for CB-2282
 +        settings.setAppCacheMaxSize(5 * 1048576);
 +        String pathToCache = this.cordova.getActivity().getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
 +        settings.setAppCachePath(pathToCache);
 +        settings.setAppCacheEnabled(true);
 +        
 +        // Fix for CB-1405
 +        // Google issue 4641
 +        this.updateUserAgentString();
 +        
 +        IntentFilter intentFilter = new IntentFilter();
 +        intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
 +        if (this.receiver == null) {
 +            this.receiver = new BroadcastReceiver() {
 +                @Override
 +                public void onReceive(Context context, Intent intent) {
 +                    updateUserAgentString();
 +                }
 +            };
 +            this.cordova.getActivity().registerReceiver(this.receiver, intentFilter);
 +        }
 +        // end CB-1405
 +
 +        pluginManager = new PluginManager(this, this.cordova);
 +        jsMessageQueue = new NativeToJsMessageQueue(this, cordova);
 +        exposedJsApi = new AndroidExposedJsApi(pluginManager, jsMessageQueue);
 +        resourceApi = new CordovaResourceApi(this.getContext(), pluginManager);
 +        exposeJsInterface();
 +    }
 +
 +	/**
 +	 * Override this method to decide whether or not you need to request the
 +	 * focus when your application start
 +	 * 
 +	 * @return true unless this method is overriden to return a different value
 +	 */
 +    protected boolean shouldRequestFocusOnInit() {
 +		return true;
 +	}
 +
 +	private void updateUserAgentString() {
 +        this.getSettings().getUserAgentString();
 +    }
 +
 +    private void exposeJsInterface() {
 +        int SDK_INT = Build.VERSION.SDK_INT;
 +        if ((SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1)) {
 +            Log.i(TAG, "Disabled addJavascriptInterface() bridge since Android version is old.");
 +            // Bug being that Java Strings do not get converted to JS strings automatically.
 +            // This isn't hard to work-around on the JS side, but it's easier to just
 +            // use the prompt bridge instead.
 +            return;            
 +        } 
 +        this.addJavascriptInterface(exposedJsApi, "_cordovaNative");
 +    }
 +
 +    /**
 +     * Set the WebViewClient.
 +     *
 +     * @param client
 +     */
 +    public void setWebViewClient(CordovaWebViewClient client) {
 +        this.viewClient = client;
 +        super.setWebViewClient((WebViewClient) client);
 +    }
 +
 +    /**
 +     * Set the WebChromeClient.
 +     *
 +     * @param client
 +     */
 +    public void setWebChromeClient(CordovaChromeClient client) {
 +        this.chromeClient = client;
 +        super.setWebChromeClient((WebChromeClient) client);
 +    }
 +    
 +    public CordovaChromeClient getWebChromeClient() {
 +        return this.chromeClient;
 +    }
 +
 +    /**
 +     * Load the url into the webview.
 +     *
 +     * @param url
 +     */
 +    @Override
 +    public void loadUrl(String url) {
 +        if (url.equals("about:blank") || url.startsWith("javascript:")) {
 +            this.loadUrlNow(url);
 +        }
 +        else {
 +
 +            String initUrl = this.getProperty("url", null);
 +
 +            // If first page of app, then set URL to load to be the one passed in
 +            if (initUrl == null) {
 +                this.loadUrlIntoView(url);
 +            }
 +            // Otherwise use the URL specified in the activity's extras bundle
 +            else {
 +                this.loadUrlIntoView(initUrl);
 +            }
 +        }
 +    }
 +
 +    /**
 +     * Load the url into the webview after waiting for period of time.
 +     * This is used to display the splashscreen for certain amount of time.
 +     *
 +     * @param url
 +     * @param time              The number of ms to wait before loading webview
 +     */
 +    public void loadUrl(final String url, int time) {
 +        String initUrl = this.getProperty("url", null);
 +
 +        // If first page of app, then set URL to load to be the one passed in
 +        if (initUrl == null) {
 +            this.loadUrlIntoView(url, time);
 +        }
 +        // Otherwise use the URL specified in the activity's extras bundle
 +        else {
 +            this.loadUrlIntoView(initUrl);
 +        }
 +    }
 +
 +    public void loadUrlIntoView(final String url) {
 +        loadUrlIntoView(url, true);
 +    }
 +
 +    /**
 +     * Load the url into the webview.
 +     *
 +     * @param url
 +     */
 +    public void loadUrlIntoView(final String url, boolean recreatePlugins) {
 +        LOG.d(TAG, ">>> loadUrl(" + url + ")");
 +
 +        if (recreatePlugins) {
 +            this.url = url;
 +            this.pluginManager.init();
 +        }
 +
 +        // Create a timeout timer for loadUrl
 +        final AndroidWebView me = this;
 +        final int currentLoadUrlTimeout = me.loadUrlTimeout;
 +        final int loadUrlTimeoutValue = Integer.parseInt(this.getProperty("LoadUrlTimeoutValue", "20000"));
 +
 +        // Timeout error method
 +        final Runnable loadError = new Runnable() {
 +            public void run() {
 +                me.stopLoading();
 +                LOG.e(TAG, "CordovaWebView: TIMEOUT ERROR!");
 +                if (viewClient != null) {
 +                    viewClient.onReceivedError(me, -6, "The connection to the server was unsuccessful.", url);
 +                }
 +            }
 +        };
 +
 +        // Timeout timer method
 +        final Runnable timeoutCheck = new Runnable() {
 +            public void run() {
 +                try {
 +                    synchronized (this) {
 +                        wait(loadUrlTimeoutValue);
 +                    }
 +                } catch (InterruptedException e) {
 +                    e.printStackTrace();
 +                }
 +
 +                // If timeout, then stop loading and handle error
 +                if (me.loadUrlTimeout == currentLoadUrlTimeout) {
 +                    me.cordova.getActivity().runOnUiThread(loadError);
 +                }
 +            }
 +        };
 +
 +        // Load url
 +        this.cordova.getActivity().runOnUiThread(new Runnable() {
 +            public void run() {
 +                cordova.getThreadPool().execute(timeoutCheck);
 +                me.loadUrlNow(url);
 +            }
 +        });
 +    }
 +
 +    /**
 +     * Load URL in webview.
 +     *
 +     * @param url
 +     */
 +    public void loadUrlNow(String url) {
 +        if (LOG.isLoggable(LOG.DEBUG) && !url.startsWith("javascript:")) {
 +            LOG.d(TAG, ">>> loadUrlNow()");
 +        }
 +        if (url.startsWith("file://") || url.startsWith("javascript:") || Config.isUrlWhiteListed(url)) {
 +            super.loadUrl(url);
 +        }
 +    }
 +
 +    /**
 +     * Load the url into the webview after waiting for period of time.
 +     * This is used to display the splashscreen for certain amount of time.
 +     *
 +     * @param url
 +     * @param time              The number of ms to wait before loading webview
 +     */
 +    public void loadUrlIntoView(final String url, final int time) {
 +
 +        // If not first page of app, then load immediately
 +        // Add support for browser history if we use it.
 +        if ((url.startsWith("javascript:")) || this.canGoBack()) {
 +        }
 +
 +        // If first page, then show splashscreen
 +        else {
 +
 +            LOG.d(TAG, "loadUrlIntoView(%s, %d)", url, time);
 +
 +            // Send message to show splashscreen now if desired
 +            this.postMessage("splashscreen", "show");
 +        }
 +
 +        // Load url
 +        this.loadUrlIntoView(url);
 +    }
 +    
 +    @Override
 +    public void stopLoading() {
 +        //viewClient.isCurrentlyLoading = false;
 +        super.stopLoading();
 +    }
 +    
 +    public void onScrollChanged(int l, int t, int oldl, int oldt)
 +    {
 +        super.onScrollChanged(l, t, oldl, oldt);
 +        //We should post a message that the scroll changed
 +        ScrollEvent myEvent = new ScrollEvent(l, t, oldl, oldt, this);
 +        this.postMessage("onScrollChanged", myEvent);
 +    }
 +    
 +    /**
 +     * Send JavaScript statement back to JavaScript.
 +     * (This is a convenience method)
 +     *
 +     * @param statement
 +     */
 +    public void sendJavascript(String statement) {
 +        this.jsMessageQueue.addJavaScript(statement);
 +    }
 +
 +    /**
 +     * Send a plugin result back to JavaScript.
 +     * (This is a convenience method)
 +     *
 +     * @param result
 +     * @param callbackId
 +     */
 +    public void sendPluginResult(PluginResult result, String callbackId) {
 +        this.jsMessageQueue.addPluginResult(result, callbackId);
 +    }
 +
 +    /**
 +     * Send a message to all plugins.
 +     *
 +     * @param id            The message id
 +     * @param data          The message data
 +     */
 +    public void postMessage(String id, Object data) {
 +        if (this.pluginManager != null) {
 +            this.pluginManager.postMessage(id, data);
 +        }
 +    }
 +
 +
 +    /**
 +     * Go to previous page in history.  (We manage our own history)
 +     *
 +     * @return true if we went back, false if we are already at top
 +     */
 +    public boolean backHistory() {
 +
 +        // Check webview first to see if there is a history
 +        // This is needed to support curPage#diffLink, since they are added to appView's history, but not our history url array (JQMobile behavior)
 +        if (super.canGoBack()) {
 +            printBackForwardList();
 +            super.goBack();
 +            
 +            return true;
 +        }
 +        return false;
 +    }
 +
 +
 +    /**
 +     * Load the specified URL in the Cordova webview or a new browser instance.
 +     *
 +     * NOTE: If openExternal is false, only URLs listed in whitelist can be loaded.
 +     *
 +     * @param url           The url to load.
 +     * @param openExternal  Load url in browser instead of Cordova webview.
 +     * @param clearHistory  Clear the history stack, so new page becomes top of history
 +     * @param params        Parameters for new app
 +     */
 +    public void showWebPage(String url, boolean openExternal, boolean clearHistory, HashMap<String, Object> params) {
 +        LOG.d(TAG, "showWebPage(%s, %b, %b, HashMap", url, openExternal, clearHistory);
 +
 +        // If clearing history
 +        if (clearHistory) {
 +            this.clearHistory();
 +        }
 +
 +        // If loading into our webview
 +        if (!openExternal) {
 +
 +            // Make sure url is in whitelist
 +            if (url.startsWith("file://") || Config.isUrlWhiteListed(url)) {
 +                // TODO: What about params?
 +                // Load new URL
 +                this.loadUrl(url);
 +                return;
 +            }
 +            // Load in default viewer if not
 +            LOG.w(TAG, "showWebPage: Cannot load URL into webview since it is not in white list.  Loading into browser instead. (URL=" + url + ")");
 +        }
 +        try {
 +            // Omitting the MIME type for file: URLs causes "No Activity found to handle Intent".
 +            // Adding the MIME type to http: URLs causes them to not be handled by the downloader.
 +            Intent intent = new Intent(Intent.ACTION_VIEW);
 +            Uri uri = Uri.parse(url);
 +            if ("file".equals(uri.getScheme())) {
 +                intent.setDataAndType(uri, resourceApi.getMimeType(uri));
 +            } else {
 +                intent.setData(uri);
 +            }
 +            cordova.getActivity().startActivity(intent);
 +        } catch (android.content.ActivityNotFoundException e) {
 +            LOG.e(TAG, "Error loading url " + url, e);
 +        }
 +    }
 +
 +    /**
 +     * Check configuration parameters from Config.
 +     * Approved list of URLs that can be loaded into Cordova
 +     *      <access origin="http://server regexp" subdomains="true" />
 +     * Log level: ERROR, WARN, INFO, DEBUG, VERBOSE (default=ERROR)
 +     *      <log level="DEBUG" />
 +     */
 +    private void loadConfiguration() {
 + 
 +        if ("true".equals(this.getProperty("Fullscreen", "false"))) {
 +            this.cordova.getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
 +            this.cordova.getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
 +        }
 +    }
 +
 +    /**
 +     * Get string property for activity.
 +     *
 +     * @param name
 +     * @param defaultValue
 +     * @return the String value for the named property
 +     */
 +    public String getProperty(String name, String defaultValue) {
 +        Bundle bundle = this.cordova.getActivity().getIntent().getExtras();
 +        if (bundle == null) {
 +            return defaultValue;
 +        }
 +        name = name.toLowerCase(Locale.getDefault());
 +        Object p = bundle.get(name);
 +        if (p == null) {
 +            return defaultValue;
 +        }
 +        return p.toString();
 +    }
 +
 +    /*
 +     * onKeyDown
 +     */
 +    @Override
 +    public boolean onKeyDown(int keyCode, KeyEvent event)
 +    {
 +        if(keyDownCodes.contains(keyCode))
 +        {
 +            if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
 +                    // only override default behavior is event bound
 +                    LOG.d(TAG, "Down Key Hit");
 +                    this.loadUrl("javascript:cordova.fireDocumentEvent('volumedownbutton');");
 +                    return true;
 +            }
 +            // If volumeup key
 +            else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
 +                    LOG.d(TAG, "Up Key Hit");
 +                    this.loadUrl("javascript:cordova.fireDocumentEvent('volumeupbutton');");
 +                    return true;
 +            }
 +            else
 +            {
 +                return super.onKeyDown(keyCode, event);
 +            }
 +        }
 +        else if(keyCode == KeyEvent.KEYCODE_BACK)
 +        {
 +            return !(this.startOfHistory()) || this.bound;
 +        }
 +        else if(keyCode == KeyEvent.KEYCODE_MENU)
 +        {
 +            //How did we get here?  Is there a childView?
 +            View childView = this.getFocusedChild();
 +            if(childView != null)
 +            {
 +                //Make sure we close the keyboard if it's present
 +                InputMethodManager imm = (InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
 +                imm.hideSoftInputFromWindow(childView.getWindowToken(), 0);
 +                cordova.getActivity().openOptionsMenu();
 +                return true;
 +            } else {
 +                return super.onKeyDown(keyCode, event);
 +            }
 +        }
 +        
 +        return super.onKeyDown(keyCode, event);
 +    }
 +    
 +
 +    @Override
 +    public boolean onKeyUp(int keyCode, KeyEvent event)
 +    {
 +        // If back key
 +        if (keyCode == KeyEvent.KEYCODE_BACK) {
 +            // A custom view is currently displayed  (e.g. playing a video)
 +            if(mCustomView != null) {
 +                this.hideCustomView();
 +            } else {
 +                // The webview is currently displayed
 +                // If back key is bound, then send event to JavaScript
 +                if (this.bound) {
 +                    this.loadUrl("javascript:cordova.fireDocumentEvent('backbutton');");
 +                    return true;
 +                } else {
 +                    // If not bound
 +                    // Go to previous page in webview if it is possible to go back
 +                    if (this.backHistory()) {
 +                        return true;
 +                    }
 +                    // If not, then invoke default behavior
 +                    else {
 +                        //this.activityState = ACTIVITY_EXITING;
 +                    	//return false;
 +                    	// If they hit back button when app is initializing, app should exit instead of hang until initialization (CB2-458)
 +                    	this.cordova.getActivity().finish();
 +                    }
 +                }
 +            }
 +        }
 +        // Legacy
 +        else if (keyCode == KeyEvent.KEYCODE_MENU) {
 +            if (this.lastMenuEventTime < event.getEventTime()) {
 +                this.loadUrl("javascript:cordova.fireDocumentEvent('menubutton');");
 +            }
 +            this.lastMenuEventTime = event.getEventTime();
 +            return super.onKeyUp(keyCode, event);
 +        }
 +        // If search key
 +        else if (keyCode == KeyEvent.KEYCODE_SEARCH) {
 +            this.loadUrl("javascript:cordova.fireDocumentEvent('searchbutton');");
 +            return true;
 +        }
 +        else if(keyUpCodes.contains(keyCode))
 +        {
 +            //What the hell should this do?
 +            return super.onKeyUp(keyCode, event);
 +        }
 +
 +        //Does webkit change this behavior?
 +        return super.onKeyUp(keyCode, event);
 +    }
 +
 +    
 +    public void bindButton(boolean override)
 +    {
 +        this.bound = override;
 +    }
 +
 +    public void bindButton(String button, boolean override) {
 +        // TODO Auto-generated method stub
 +        if (button.compareTo("volumeup")==0) {
 +          keyDownCodes.add(KeyEvent.KEYCODE_VOLUME_UP);
 +        }
 +        else if (button.compareTo("volumedown")==0) {
 +          keyDownCodes.add(KeyEvent.KEYCODE_VOLUME_DOWN);
 +        }
 +      }
 +
 +    public void bindButton(int keyCode, boolean keyDown, boolean override) {
 +       if(keyDown)
 +       {
 +           keyDownCodes.add(keyCode);
 +       }
 +       else
 +       {
 +           keyUpCodes.add(keyCode);
 +       }
 +    }
 +
 +    public boolean isBackButtonBound()
 +    {
 +        return this.bound;
 +    }
 +    
 +    public void handlePause(boolean keepRunning)
 +    {
 +        LOG.d(TAG, "Handle the pause");
 +        // Send pause event to JavaScript
 +        this.loadUrl("javascript:try{cordova.fireDocumentEvent('pause');}catch(e){console.log('exception firing pause event from native');};");
 +
 +        // Forward to plugins
 +        if (this.pluginManager != null) {
 +            this.pluginManager.onPause(keepRunning);
 +        }
 +
 +        // If app doesn't want to run in background
 +        if (!keepRunning) {
 +            // Pause JavaScript timers (including setInterval)
 +            this.pauseTimers();
 +        }
 +        paused = true;
 +   
 +    }
 +    
 +    public void handleResume(boolean keepRunning, boolean activityResultKeepRunning)
 +    {
 +
 +        this.loadUrl("javascript:try{cordova.fireDocumentEvent('resume');}catch(e){console.log('exception firing resume event from native');};");
 +        
 +        // Forward to plugins
 +        if (this.pluginManager != null) {
 +            this.pluginManager.onResume(keepRunning);
 +        }
 +
 +        // Resume JavaScript timers (including setInterval)
 +        this.resumeTimers();
 +        paused = false;
 +    }
 +    
 +    public void handleDestroy()
 +    {
 +        // Send destroy event to JavaScript
 +        this.loadUrl("javascript:try{cordova.require('cordova/channel').onDestroy.fire();}catch(e){console.log('exception firing destroy event from native');};");
 +
 +        // Load blank page so that JavaScript onunload is called
 +        this.loadUrl("about:blank");
 +
 +        // Forward to plugins
 +        if (this.pluginManager != null) {
 +            this.pluginManager.onDestroy();
 +        }
 +        
 +        // unregister the receiver
 +        if (this.receiver != null) {
 +            try {
 +                this.cordova.getActivity().unregisterReceiver(this.receiver);
 +            } catch (Exception e) {
 +                Log.e(TAG, "Error unregistering configuration receiver: " + e.getMessage(), e);
 +            }
 +        }
 +    }
 +    
 +    public void onNewIntent(Intent intent)
 +    {
 +        //Forward to plugins
 +        if (this.pluginManager != null) {
 +            this.pluginManager.onNewIntent(intent);
 +        }
 +    }
 +    
 +    public boolean isPaused()
 +    {
 +        return paused;
 +    }
 +
 +    public boolean hadKeyEvent() {
 +        return handleButton;
 +    }
 +
 +    // Wrapping these functions in their own class prevents warnings in adb like:
 +    // VFY: unable to resolve virtual method 285: Landroid/webkit/WebSettings;.setAllowUniversalAccessFromFileURLs
 +    @TargetApi(16)
 +    private static class Level16Apis {
 +        static void enableUniversalAccess(WebSettings settings) {
 +            settings.setAllowUniversalAccessFromFileURLs(true);
 +        }
 +    }
 +    
 +    public void printBackForwardList() {
 +        WebBackForwardList currentList = this.copyBackForwardList();
 +        int currentSize = currentList.getSize();
 +        for(int i = 0; i < currentSize; ++i)
 +        {
 +            WebHistoryItem item = currentList.getItemAtIndex(i);
 +            String url = item.getUrl();
 +            LOG.d(TAG, "The URL at index: " + Integer.toString(i) + " is " + url );
 +        }
 +    }
 +    
 +    
 +    //Can Go Back is BROKEN!
 +    public boolean startOfHistory()
 +    {
 +        WebBackForwardList currentList = this.copyBackForwardList();
 +        WebHistoryItem item = currentList.getItemAtIndex(0);
 +        if( item!=null){	// Null-fence in case they haven't called loadUrl yet (CB-2458)
 +	        String url = item.getUrl();
 +	        String currentUrl = this.getUrl();
 +	        LOG.d(TAG, "The current URL is: " + currentUrl);
 +	        LOG.d(TAG, "The URL at item 0 is: " + url);
 +	        return currentUrl.equals(url);
 +        }
 +        return false;
 +    }
 +
 +    public void showCustomView(View view, WebChromeClient.CustomViewCallback callback) {
 +        // This code is adapted from the original Android Browser code, licensed under the Apache License, Version 2.0
 +        Log.d(TAG, "showing Custom View");
 +        // if a view already exists then immediately terminate the new one
 +        if (mCustomView != null) {
 +            callback.onCustomViewHidden();
 +            return;
 +        }
 +        
 +        // Store the view and its callback for later (to kill it properly)
 +        mCustomView = view;
 +        mCustomViewCallback = callback;
 +        
 +        // Add the custom view to its container.
 +        ViewGroup parent = (ViewGroup) this.getParent();
 +        parent.addView(view, COVER_SCREEN_GRAVITY_CENTER);
 +        
 +        // Hide the content view.
 +        this.setVisibility(View.GONE);
 +        
 +        // Finally show the custom view container.
 +        parent.setVisibility(View.VISIBLE);
 +        parent.bringToFront();
 +    }
 +
 +    public void hideCustomView() {
 +        // This code is adapted from the original Android Browser code, licensed under the Apache License, Version 2.0
 +        Log.d(TAG, "Hiding Custom View");
 +        if (mCustomView == null) return;
 +
 +        // Hide the custom view.
 +        mCustomView.setVisibility(View.GONE);
 +        
 +        // Remove the custom view from its container.
 +        ViewGroup parent = (ViewGroup) this.getParent();
 +        parent.removeView(mCustomView);
 +        mCustomView = null;
 +        mCustomViewCallback.onCustomViewHidden();
 +        
 +        // Show the content view.
 +        this.setVisibility(View.VISIBLE);
 +    }
 +    
 +    /**
 +     * if the video overlay is showing then we need to know 
 +     * as it effects back button handling
 +     * 
 +     * @return true if custom view is showing
 +     */
 +    public boolean isCustomViewShowing() {
 +        return mCustomView != null;
 +    }
 +    
 +    public WebBackForwardList restoreState(Bundle savedInstanceState)
 +    {
 +        WebBackForwardList myList = super.restoreState(savedInstanceState);
 +        Log.d(TAG, "WebView restoration crew now restoring!");
 +        //Initialize the plugin manager once more
 +        this.pluginManager.init();
 +        return myList;
 +    }
 +
 +    public void storeResult(int requestCode, int resultCode, Intent intent) {
 +        mResult = new ActivityResult(requestCode, resultCode, intent);
 +    }
 +    
 +    public CordovaResourceApi getResourceApi() {
 +        return resourceApi;
 +    }
 +
 +    @Override
 +    public void setLayoutParams(
 +            android.widget.LinearLayout.LayoutParams layoutParams) {
 +        super.setLayoutParams(layoutParams);
 +    }
 +
 +    @Override
 +    public void setOverScrollMode(int mode) {
 +        super.setOverScrollMode(mode);
 +    }
 +
 +    @Override
 +    public void addJavascript(String statement) {
 +        this.jsMessageQueue.addJavaScript(statement);
 +    }
 +
 +    @Override
 +    public CordovaPlugin getPlugin(String initCallbackClass) {
 +        // TODO Auto-generated method stub
 +        return this.pluginManager.getPlugin(initCallbackClass);
 +    }
 +
 +    @Override
 +    public String exec(String service, String action, String callbackId,
 +            String message) throws JSONException {
 +        return this.exposedJsApi.exec(service, action, callbackId, message);
 +    }
 +
 +    @Override
 +    public void setNativeToJsBridgeMode(int parseInt) {
 +        this.exposedJsApi.setNativeToJsBridgeMode(parseInt);
 +    }
 +
 +    @Override
 +    public String retrieveJsMessages(boolean equals) {
 +        return this.exposedJsApi.retrieveJsMessages(equals);
 +    }
 +
 +    @Override
 +    public boolean onOverrideUrlLoading(String url) {
 +        return this.pluginManager.onOverrideUrlLoading(url);
 +    }
 +
 +    @Override
 +    public void resetJsMessageQueue() {
 +        this.jsMessageQueue.reset();
 +    }
 +
 +    @Override
 +    public void onReset() {
 +        this.pluginManager.onReset();
 +    }
 +
 +    @Override
 +    public void incUrlTimeout() {
 +        this.loadUrlTimeout++;
 +    }
 +
 +    @Override
 +    public PluginManager getPluginManager() {
 +        // TODO Auto-generated method stub
 +        return this.pluginManager;
 +    }
 +
 +    @Override
 +    public void setLayoutParams(
 +            android.widget.FrameLayout.LayoutParams layoutParams) {
 +        super.setLayoutParams(layoutParams);
 +    }
 +
 +    @Override
 +    public View getView() {
 +        return this;
 +    }
 +
 +
 +}


[08/10] android commit: Update JS snapshot to version 3.6.0-dev (via coho)

Posted by ia...@apache.org.
Update JS snapshot to version 3.6.0-dev (via coho)


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

Branch: refs/heads/pluggable_webview
Commit: cf42d31214ea5a437b4023ae2423d3eb5d595101
Parents: 00caa1c
Author: Joe Bowser <bo...@apache.org>
Authored: Tue May 6 15:51:17 2014 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Tue May 6 15:51:17 2014 -0700

----------------------------------------------------------------------
 framework/assets/www/cordova.js | 110 ++++++++++++++++++++++++++++++++++-
 1 file changed, 108 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/cf42d312/framework/assets/www/cordova.js
----------------------------------------------------------------------
diff --git a/framework/assets/www/cordova.js b/framework/assets/www/cordova.js
index 45c1943..c09cc42 100644
--- a/framework/assets/www/cordova.js
+++ b/framework/assets/www/cordova.js
@@ -1,5 +1,5 @@
 // Platform: android
-// 3.5.0-dev-81f9a00
+// 3.6.0-dev-eb7268f
 /*
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
@@ -19,7 +19,7 @@
  under the License.
 */
 ;(function() {
-var CORDOVA_JS_BUILD_LABEL = '3.5.0-dev-81f9a00';
+var CORDOVA_JS_BUILD_LABEL = '3.6.0-dev-eb7268f';
 // file: src/scripts/require.js
 
 /*jshint -W079 */
@@ -825,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
@@ -1247,6 +1248,111 @@ channel.join(function() {
 
 });
 
+// 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) {
 


[05/10] android commit: Revert accidentally removed lines from NOTICE

Posted by ia...@apache.org.
Revert accidentally removed lines from NOTICE


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

Branch: refs/heads/pluggable_webview
Commit: 8702c04d392cbd0d9e075705ff497b93ecf147de
Parents: c349892
Author: Andrew Grieve <ag...@chromium.org>
Authored: Tue May 6 15:17:49 2014 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Tue May 6 15:18:31 2014 -0400

----------------------------------------------------------------------
 NOTICE | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/8702c04d/NOTICE
----------------------------------------------------------------------
diff --git a/NOTICE b/NOTICE
index 8ec56a5..40c5e74 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,5 +1,17 @@
 Apache Cordova
-Copyright 2012 The Apache Software Foundation
+Copyright 2014 The Apache Software Foundation
 
 This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
+The Apache Software Foundation (http://www.apache.org)
+
+=========================================================================
+==  NOTICE file corresponding to the section 4 d of                    ==
+==  the Apache License, Version 2.0,                                   ==
+==  in this case for the Android-specific code.                        ==
+=========================================================================
+
+This product includes software developed as part of
+The Android Open Source Project (http://source.android.com).
+
+This software includes software developed at Square, Inc.
+Copyright (C) 2013 Square, Inc.