You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by bo...@apache.org on 2012/08/01 01:18:14 UTC

android commit: Moving the fix for # and ? to a new class to fix CB-995

Updated Branches:
  refs/heads/master db7ee192f -> ecd6ca017


Moving the fix for # and ? to a new class to fix CB-995


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

Branch: refs/heads/master
Commit: ecd6ca0172de56d6524c25fd2996913184b575fb
Parents: db7ee19
Author: Joe Bowser <bo...@apache.org>
Authored: Tue Jul 31 16:16:57 2012 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Tue Jul 31 16:16:57 2012 -0700

----------------------------------------------------------------------
 .../src/org/apache/cordova/CordovaWebView.java     |   19 ++++-
 .../org/apache/cordova/CordovaWebViewClient.java   |   39 ---------
 .../cordova/IceCreamCordovaWebViewClient.java      |   65 +++++++++++++++
 3 files changed, 81 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/ecd6ca01/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 7fd5775..0ce63c0 100755
--- a/framework/src/org/apache/cordova/CordovaWebView.java
+++ b/framework/src/org/apache/cordova/CordovaWebView.java
@@ -119,7 +119,7 @@ public class CordovaWebView extends WebView {
             Log.d(TAG, "Your activity must implement CordovaInterface to work");
         }
         this.setWebChromeClient(new CordovaChromeClient(this.cordova, this));
-        this.setWebViewClient(new CordovaWebViewClient(this.cordova, this));
+        this.initWebViewClient(this.cordova);
         this.loadConfiguration();
         this.setup();
     }
@@ -143,7 +143,7 @@ public class CordovaWebView extends WebView {
             Log.d(TAG, "Your activity must implement CordovaInterface to work");
         }
         this.setWebChromeClient(new CordovaChromeClient(this.cordova, this));
-        this.setWebViewClient(new CordovaWebViewClient(this.cordova, this));
+        this.initWebViewClient(this.cordova);
         this.loadConfiguration();
         this.setup();
     }
@@ -167,11 +167,24 @@ public class CordovaWebView extends WebView {
             Log.d(TAG, "Your activity must implement CordovaInterface to work");
         }
         this.setWebChromeClient(new CordovaChromeClient(this.cordova));
-        this.setWebViewClient(new CordovaWebViewClient(this.cordova));
+        this.initWebViewClient(this.cordova);
         this.loadConfiguration();
         this.setup();
     }
 
+
+    private void initWebViewClient(CordovaInterface cordova) {
+        if(android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.HONEYCOMB)
+        {
+            this.setWebViewClient(new CordovaWebViewClient(this.cordova, this));
+        }
+        else
+        {
+            this.setWebViewClient(new IceCreamCordovaWebViewClient(this.cordova, this));
+        }
+    }
+
+    
     /**
      * Initialize webview.
      */

http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/ecd6ca01/framework/src/org/apache/cordova/CordovaWebViewClient.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaWebViewClient.java b/framework/src/org/apache/cordova/CordovaWebViewClient.java
index 4934c8f..6e4ff7f 100755
--- a/framework/src/org/apache/cordova/CordovaWebViewClient.java
+++ b/framework/src/org/apache/cordova/CordovaWebViewClient.java
@@ -459,43 +459,4 @@ public class CordovaWebViewClient extends WebViewClient {
         this.authenticationTokens.clear();
     }
 
-    @Override
-    public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
-        if(url.contains("?") || url.contains("#")){
-            return generateWebResourceResponse(url);
-        } else {
-            return super.shouldInterceptRequest(view, url);
-        }
-    }
-
-    private WebResourceResponse generateWebResourceResponse(String url) {
-        final String ANDROID_ASSET = "file:///android_asset/";
-        if (url.startsWith(ANDROID_ASSET)) {
-            String niceUrl = url;
-            niceUrl = url.replaceFirst(ANDROID_ASSET, "");
-            if(niceUrl.contains("?")){
-                niceUrl = niceUrl.split("\\?")[0];
-            }
-            else if(niceUrl.contains("#"))
-            {
-                niceUrl = niceUrl.split("#")[0];
-            }
-
-            String mimetype = null;
-            if(niceUrl.endsWith(".html")){
-                mimetype = "text/html";
-            }
-
-            try {
-                AssetManager assets = cordova.getActivity().getAssets();
-                Uri uri = Uri.parse(niceUrl);
-                InputStream stream = assets.open(uri.getPath(), AssetManager.ACCESS_STREAMING);
-                WebResourceResponse response = new WebResourceResponse(mimetype, "UTF-8", stream);
-                return response;
-            } catch (IOException e) {
-                LOG.e("generateWebResourceResponse", e.getMessage(), e);
-            }
-        }
-        return null;
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cordova-android/blob/ecd6ca01/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java b/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java
new file mode 100644
index 0000000..24a9daa
--- /dev/null
+++ b/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java
@@ -0,0 +1,65 @@
+package org.apache.cordova;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.cordova.api.CordovaInterface;
+import org.apache.cordova.api.LOG;
+
+import android.content.res.AssetManager;
+import android.net.Uri;
+import android.webkit.WebResourceResponse;
+import android.webkit.WebView;
+
+public class IceCreamCordovaWebViewClient extends CordovaWebViewClient {
+
+
+    public IceCreamCordovaWebViewClient(CordovaInterface cordova) {
+        super(cordova);
+    }
+    
+    public IceCreamCordovaWebViewClient(CordovaInterface cordova, CordovaWebView view) {
+        super(cordova, view);
+    }
+
+    @Override
+    public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
+        if(url.contains("?") || url.contains("#")){
+            return generateWebResourceResponse(url);
+        } else {
+            return super.shouldInterceptRequest(view, url);
+        }
+    }
+
+    private WebResourceResponse generateWebResourceResponse(String url) {
+        final String ANDROID_ASSET = "file:///android_asset/";
+        if (url.startsWith(ANDROID_ASSET)) {
+            String niceUrl = url;
+            niceUrl = url.replaceFirst(ANDROID_ASSET, "");
+            if(niceUrl.contains("?")){
+                niceUrl = niceUrl.split("\\?")[0];
+            }
+            else if(niceUrl.contains("#"))
+            {
+                niceUrl = niceUrl.split("#")[0];
+            }
+
+            String mimetype = null;
+            if(niceUrl.endsWith(".html")){
+                mimetype = "text/html";
+            }
+
+            try {
+                AssetManager assets = cordova.getActivity().getAssets();
+                Uri uri = Uri.parse(niceUrl);
+                InputStream stream = assets.open(uri.getPath(), AssetManager.ACCESS_STREAMING);
+                WebResourceResponse response = new WebResourceResponse(mimetype, "UTF-8", stream);
+                return response;
+            } catch (IOException e) {
+                LOG.e("generateWebResourceResponse", e.getMessage(), e);
+            }
+        }
+        return null;
+    }
+    
+}