@@ -12,9 +12,14 @@ import android.webkit.WebView;
12import android.webkit.WebViewClient;
12import android.webkit.WebViewClient;
13import android.webkit.WebChromeClient;
13import android.webkit.WebChromeClient;
14import android.webkit.PermissionRequest;
14import android.webkit.PermissionRequest;
15+import android.webkit.MimeTypeMap;
16+import android.webkit.WebResourceRequest;
17+import android.webkit.WebResourceResponse;
15import android.net.Uri;
18import android.net.Uri;
16import android.annotation.TargetApi;
19import android.annotation.TargetApi;
17import android.os.Build;
20import android.os.Build;
21+import java.io.InputStream;
22+import java.io.IOException;
19import java.nio.charset.StandardCharsets;
24import java.nio.charset.StandardCharsets;
@@ -42,6 +47,30 @@ public class MainWidget {
42 public void onPageFinished(WebView _view, String _url) {
47 public void onPageFinished(WebView _view, String _url) {
43 wv.evaluateJavascript(initialJS, null);
48 wv.evaluateJavascript(initialJS, null);
51+ // Re-route / to /android_asset
52+ public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request) {
53+ Uri uri = request.getUrl();
54+ if(!uri.getScheme().equals("file"))
57+ String path = uri.getPath();
58+ path = getAssetPath(path);
60+ String mimeType = getMimeType(uri.toString());
61+ String encoding = "";
64+ InputStream data = a.getApplicationContext().getAssets().open(path);
65+ return new WebResourceResponse(mimeType, encoding, data);
67+ catch (IOException e) {
68+ Log.i("reflex", "Opening resource failed, Webview will handle the request ..");
47 wv.setWebChromeClient(new WebChromeClient() {
76 wv.setWebChromeClient(new WebChromeClient() {
@@ -82,6 +111,22 @@ public class MainWidget {
114+ private static String getMimeType(String url) {
116+ String extension = MimeTypeMap.getFileExtensionFromUrl(url);
117+ if (extension != null) {
118+ type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
123+ /** Get the path of an asset. Strips leading / and leading /android_asset/ */
124+ private static String getAssetPath(String path) {
125+ path = path.startsWith("/android_asset") ? path.substring("/android_asset".length()) : path;
126+ path = path.startsWith("/") ? path.substring(1) : path;
85 private static class JSaddleCallbacks {
130 private static class JSaddleCallbacks {
86 private final long callbacks;
131 private final long callbacks;
87 private native void startProcessing(long callbacks);
132 private native void startProcessing(long callbacks);