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 d5667148..a161bf8f 100755 --- a/framework/src/org/apache/cordova/CordovaActivity.java +++ b/framework/src/org/apache/cordova/CordovaActivity.java @@ -214,7 +214,7 @@ public class CordovaActivity extends Activity implements CordovaInterface { * require a more specialized web view. */ protected CordovaWebView makeWebView() { - String r = this.getStringProperty("webView", "org.apache.cordova.Android").concat("WebView"); + String r = this.getStringProperty("webView", "org.apache.cordova.AndroidWebView"); try { Class webViewClass = Class.forName(r); @@ -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,44 +260,7 @@ public class CordovaActivity extends Activity implements CordovaInterface { * @param webView the default constructed web view object */ protected CordovaWebViewClient makeWebViewClient(CordovaWebView webView) { - String r = this.getStringProperty("webView", "org.apache.cordova.Android").concat("WebViewClient"); - - try { - Class webViewClientClass = Class.forName(r); - Constructor [] webViewClientConstructors = webViewClientClass.getConstructors(); - - - if(CordovaWebViewClient.class.isAssignableFrom(webViewClientClass)) { - for (Constructor constructor : webViewClientConstructors) { - try { - CordovaWebViewClient webViewClient = (CordovaWebViewClient) constructor.newInstance(this, webView); - return webViewClient; - } catch (IllegalArgumentException e) { - LOG.e(TAG, "Illegal arguments, try next constructor."); - } - } - } - else - { - LOG.e(TAG, "The WebView Engine is NOT a proper WebView, defaulting to system WebView"); - } - } catch (ClassNotFoundException e) { - LOG.e(TAG, "The WebView Engine was not found, defaulting to system WebView"); - } catch (InstantiationException e) { - LOG.e(TAG, "Unable to instantiate the WebView, defaulting to system WebView"); - } catch (IllegalAccessException e) { - LOG.e(TAG, "Illegal Access to Constructor. This should never happen, defaulting to system WebView"); - } catch (IllegalArgumentException e) { - LOG.e(TAG, "The WebView does not implement the default constructor, defaulting to system WebView"); - } catch (InvocationTargetException e) { - LOG.e(TAG, "Invocation Target Exception! Reflection is hard, defaulting to system 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(); } /** @@ -303,40 +272,7 @@ public class CordovaActivity extends Activity implements CordovaInterface { * @param webView the default constructed web view object */ protected CordovaChromeClient makeChromeClient(CordovaWebView webView) { - String r = this.getStringProperty("webView", "org.apache.cordova.Android").concat("ChromeClient"); - - try { - Class chromeClientClass = Class.forName(r); - Constructor [] chromeClientConstructors = chromeClientClass.getConstructors(); - - - if(CordovaChromeClient.class.isAssignableFrom(chromeClientClass)) { - for (Constructor constructor : chromeClientConstructors) { - try { - CordovaChromeClient chromeClient = (CordovaChromeClient) constructor.newInstance(this, webView); - return chromeClient; - } catch (IllegalArgumentException e) { - LOG.e(TAG, "Illegal arguments, try next constructor."); - } - } - } - else - { - LOG.e(TAG, "The WebView Engine is NOT a proper WebView, defaulting to system WebView"); - } - } catch (ClassNotFoundException e) { - LOG.e(TAG, "The WebView Engine was not found, defaulting to system WebView"); - } catch (InstantiationException e) { - LOG.e(TAG, "Unable to instantiate the WebView, defaulting to system WebView"); - } catch (IllegalAccessException e) { - LOG.e(TAG, "Illegal Access to Constructor. This should never happen, defaulting to system WebView"); - } catch (IllegalArgumentException e) { - LOG.e(TAG, "The WebView does not implement the default constructor, defaulting to system WebView"); - } catch (InvocationTargetException e) { - LOG.e(TAG, "Invocation Target Exception! Reflection is hard, defaulting to system 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);