diff --git a/framework/src/org/apache/cordova/CordovaActivity.java b/framework/src/org/apache/cordova/CordovaActivity.java index 8931b518..d5667148 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.AndroidWebView"); + String r = this.getStringProperty("webView", "org.apache.cordova.Android").concat("WebView"); try { Class webViewClass = Class.forName(r); @@ -254,6 +254,39 @@ 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 { @@ -270,6 +303,39 @@ 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); }