@@ -1,21 +1,28 @@
11package org.reflexfrp.reflexdom;
22
3+import android.annotation.TargetApi;
4+import android.annotation.TargetApi;
35import android.app.Activity;
6+import android.net.Uri;
7+import android.net.Uri;
8+import android.os.Build;
9+import android.os.Build;
410import android.os.Handler;
511import android.util.Log;
612import android.view.ViewGroup.LayoutParams;
713import android.view.Window;
814import android.webkit.CookieManager;
915import android.webkit.JavascriptInterface;
16+import android.webkit.MimeTypeMap;
17+import android.webkit.PermissionRequest;
18+import android.webkit.WebChromeClient;
19+import android.webkit.WebResourceRequest;
20+import android.webkit.WebResourceResponse;
1021import android.webkit.WebSettings;
1122import android.webkit.WebView;
1223import android.webkit.WebViewClient;
13−import android.webkit.WebChromeClient;
14−import android.webkit.PermissionRequest;
15−import android.net.Uri;
16−import android.annotation.TargetApi;
17−import android.os.Build;
18−
24+import java.io.IOException;
25+import java.io.InputStream;
1926import java.nio.charset.StandardCharsets;
2027
2128public class MainWidget {
@@ -42,6 +49,30 @@ public class MainWidget {
4249 public void onPageFinished(WebView _view, String _url) {
4350 wv.evaluateJavascript(initialJS, null);
4451 }
52+
53+ // Re-route / to /android_asset
54+ public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request) {
55+ Uri uri = request.getUrl();
56+ if(!uri.getScheme().equals("file"))
57+ return null;
58+
59+ String path = uri.getPath();
60+ path = getAssetPath(path);
61+
62+ String mimeType = getMimeType(uri.toString());
63+ String encoding = "";
64+
65+ try {
66+ InputStream data = a.getApplicationContext().getAssets().open(path);
67+ return new WebResourceResponse(mimeType, encoding, data);
68+ }
69+ catch (IOException e) {
70+ Log.i("reflex", "Opening resource failed, Webview will handle the request ..");
71+ e.printStackTrace();
72+ }
73+
74+ return null;
75+ }
4576 });
4677
4778 wv.setWebChromeClient(new WebChromeClient() {
@@ -82,6 +113,22 @@ public class MainWidget {
82113 };
83114 }
84115
116+ private static String getMimeType(String url) {
117+ String type = "";
118+ String extension = MimeTypeMap.getFileExtensionFromUrl(url);
119+ if (extension != null) {
120+ type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
121+ }
122+ return type;
123+ }
124+
125+ /** Get the path of an asset. Strips leading / and leading /android_asset/ */
126+ private static String getAssetPath(String path) {
127+ path = path.startsWith("/android_asset") ? path.substring("/android_asset".length()) : path;
128+ path = path.startsWith("/") ? path.substring(1) : path;
129+ return path;
130+ }
131+
85132 private static class JSaddleCallbacks {
86133 private final long callbacks;
87134 private native void startProcessing(long callbacks);