Defer construction of client objects to WebView
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/8e31ef7b Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/8e31ef7b Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/8e31ef7b Branch: refs/heads/pluggable_webview Commit: 8e31ef7be6165d4566e2a27d1a72b9770db10ab9 Parents: f4555f7 Author: Ian Clelland <[email protected]> Authored: Thu Apr 24 14:57:34 2014 -0400 Committer: Ian Clelland <[email protected]> Committed: Tue Apr 29 22:50:12 2014 -0400 ---------------------------------------------------------------------- .../src/org/apache/cordova/AndroidWebView.java | 27 +++++++++++++------- .../src/org/apache/cordova/CordovaActivity.java | 18 ++++++------- .../src/org/apache/cordova/CordovaWebView.java | 4 +++ 3 files changed, 30 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-android/blob/8e31ef7b/framework/src/org/apache/cordova/AndroidWebView.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/AndroidWebView.java b/framework/src/org/apache/cordova/AndroidWebView.java index a940dd5..2603a86 100755 --- a/framework/src/org/apache/cordova/AndroidWebView.java +++ b/framework/src/org/apache/cordova/AndroidWebView.java @@ -166,8 +166,6 @@ public class AndroidWebView extends WebView implements CordovaWebView { { Log.d(TAG, "Your activity must implement CordovaInterface to work"); } - this.setWebChromeClient((CordovaChromeClient) new AndroidChromeClient(this.cordova, this)); - this.initWebViewClient(this.cordova); this.loadConfiguration(); this.setup(); } @@ -190,7 +188,6 @@ public class AndroidWebView extends WebView implements CordovaWebView { { Log.d(TAG, "Your activity must implement CordovaInterface to work"); } - this.setWebChromeClient((CordovaChromeClient) new AndroidChromeClient(this.cordova, this)); this.loadConfiguration(); this.setup(); } @@ -214,28 +211,40 @@ public class AndroidWebView extends WebView implements CordovaWebView { { Log.d(TAG, "Your activity must implement CordovaInterface to work"); } - this.setWebChromeClient((CordovaChromeClient) new AndroidChromeClient(this.cordova)); - this.initWebViewClient(this.cordova); this.loadConfiguration(); this.setup(); } /** - * set the WebViewClient, but provide special case handling for IceCreamSandwich. + * Create a default WebViewClient object for this webview. This can be overridden by the + * main application's CordovaActivity subclass. + * + * By default, it creates an AndroidWebViewClient, but we provide special case handling for + * IceCreamSandwich. */ - private void initWebViewClient(CordovaInterface cordova) { + @Override + public CordovaWebViewClient makeWebViewClient() { if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB || android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { - this.setWebViewClient((CordovaWebViewClient) new AndroidWebViewClient(this.cordova, this)); + return (CordovaWebViewClient) new AndroidWebViewClient(this.cordova, this); } else { - this.setWebViewClient((CordovaWebViewClient) new IceCreamCordovaWebViewClient(this.cordova, this)); + 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") http://git-wip-us.apache.org/repos/asf/cordova-android/blob/8e31ef7b/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 8931b51..01eff1c 100755 --- a/framework/src/org/apache/cordova/CordovaActivity.java +++ b/framework/src/org/apache/cordova/CordovaActivity.java @@ -248,29 +248,27 @@ public class CordovaActivity extends Activity implements CordovaInterface { /** * Construct the client for the default web view object. * - * This is intended to be overridable by subclasses of CordovaIntent which - * require a more specialized web view. + * This is intended to be overridable by subclasses of CordovaActivity which + * require a more specialized web view. By default, it allows the webView + * to create its own client objects. * * @param webView the default constructed web view object */ protected CordovaWebViewClient makeWebViewClient(CordovaWebView webView) { - if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { - return (CordovaWebViewClient) new AndroidWebViewClient(this, webView); - } else { - return (CordovaWebViewClient) new IceCreamCordovaWebViewClient(this, webView); - } + return webView.makeWebViewClient(); } /** * Construct the chrome client for the default web view object. * - * This is intended to be overridable by subclasses of CordovaIntent which - * require a more specialized web view. + * This is intended to be overridable by subclasses of CordovaActivity which + * require a more specialized web view. By default, it allows the webView + * to create its own client objects. * * @param webView the default constructed web view object */ protected CordovaChromeClient makeChromeClient(CordovaWebView webView) { - return (CordovaChromeClient) new AndroidChromeClient(this, webView); + return webView.makeWebChromeClient(); } /** http://git-wip-us.apache.org/repos/asf/cordova-android/blob/8e31ef7b/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 d23baee..a5496cf 100644 --- a/framework/src/org/apache/cordova/CordovaWebView.java +++ b/framework/src/org/apache/cordova/CordovaWebView.java @@ -19,6 +19,10 @@ public interface CordovaWebView { View getView(); + CordovaWebViewClient makeWebViewClient(); + + CordovaChromeClient makeWebChromeClient(); + void setWebViewClient(CordovaWebViewClient webViewClient); void setWebChromeClient(CordovaChromeClient webChromeClient);
