diff --git a/framework/src/org/apache/cordova/AndroidWebView.java b/framework/src/org/apache/cordova/AndroidWebView.java index a940dd5d..4e86dba8 100755 --- a/framework/src/org/apache/cordova/AndroidWebView.java +++ b/framework/src/org/apache/cordova/AndroidWebView.java @@ -166,7 +166,7 @@ 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.setWebChromeClient(this.makeChromeClient()); this.initWebViewClient(this.cordova); this.loadConfiguration(); this.setup(); @@ -190,7 +190,7 @@ 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.setWebChromeClient(this.makeChromeClient()); this.loadConfiguration(); this.setup(); } @@ -214,7 +214,7 @@ 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.setWebChromeClient(this.makeChromeClient()); this.initWebViewClient(this.cordova); this.loadConfiguration(); this.setup(); @@ -224,15 +224,7 @@ public class AndroidWebView extends WebView implements CordovaWebView { * set the WebViewClient, but provide special case handling for IceCreamSandwich. */ private void initWebViewClient(CordovaInterface cordova) { - 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)); - } - else - { - this.setWebViewClient((CordovaWebViewClient) new IceCreamCordovaWebViewClient(this.cordova, this)); - } + this.setWebViewClient(this.makeWebViewClient()); } /** @@ -1082,4 +1074,18 @@ public class AndroidWebView extends WebView implements CordovaWebView { public View getView() { return this; } + + @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); + } + } + + @Override + public CordovaChromeClient makeChromeClient() { + return (CordovaChromeClient) new AndroidChromeClient(this.cordova, this); + } } diff --git a/framework/src/org/apache/cordova/CordovaActivity.java b/framework/src/org/apache/cordova/CordovaActivity.java index 8931b518..a161bf8f 100755 --- a/framework/src/org/apache/cordova/CordovaActivity.java +++ b/framework/src/org/apache/cordova/CordovaActivity.java @@ -222,8 +222,14 @@ public class CordovaActivity extends Activity implements CordovaInterface { if(CordovaWebView.class.isAssignableFrom(webViewClass)) { - CordovaWebView webView = (CordovaWebView) webViewConstructors[0].newInstance(this); - return webView; + for (Constructor constructor : webViewConstructors) { + try { + CordovaWebView webView = (CordovaWebView) constructor.newInstance(this); + return webView; + } catch (IllegalArgumentException e) { + LOG.e(TAG, "Illegal arguments, try next constructor."); + } + } } else { @@ -254,11 +260,7 @@ public class CordovaActivity extends Activity implements CordovaInterface { * @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(); } /** @@ -270,7 +272,7 @@ public class CordovaActivity extends Activity implements CordovaInterface { * @param webView the default constructed web view object */ protected CordovaChromeClient makeChromeClient(CordovaWebView webView) { - return (CordovaChromeClient) new AndroidChromeClient(this, webView); + return webView.makeChromeClient(); } /** diff --git a/framework/src/org/apache/cordova/CordovaWebView.java b/framework/src/org/apache/cordova/CordovaWebView.java index d23baeec..fe043901 100644 --- a/framework/src/org/apache/cordova/CordovaWebView.java +++ b/framework/src/org/apache/cordova/CordovaWebView.java @@ -18,6 +18,10 @@ public interface CordovaWebView { Object jsMessageQueue = null; View getView(); + + CordovaWebViewClient makeWebViewClient(); + + CordovaChromeClient makeChromeClient(); void setWebViewClient(CordovaWebViewClient webViewClient);