@@ -1,21 +1,28 @@
1package org.reflexfrp.reflexdom;
1package org.reflexfrp.reflexdom;
3+import android.annotation.TargetApi;
4+import android.annotation.TargetApi;
3import android.app.Activity;
5import android.app.Activity;
6+import android.net.Uri;
7+import android.net.Uri;
8+import android.os.Build;
9+import android.os.Build;
4import android.os.Handler;
10import android.os.Handler;
5import android.util.Log;
11import android.util.Log;
6import android.view.ViewGroup.LayoutParams;
12import android.view.ViewGroup.LayoutParams;
7import android.view.Window;
13import android.view.Window;
8import android.webkit.CookieManager;
14import android.webkit.CookieManager;
9import android.webkit.JavascriptInterface;
15import 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;
10import android.webkit.WebSettings;
21import android.webkit.WebSettings;
11import android.webkit.WebView;
22import android.webkit.WebView;
12import android.webkit.WebViewClient;
23import android.webkit.WebViewClient;
13−import android.webkit.WebChromeClient;
24+import java.io.IOException;
14−import android.webkit.PermissionRequest;
25+import java.io.InputStream;
15−import android.net.Uri;
16−import android.annotation.TargetApi;
17−import android.os.Build;
19import java.nio.charset.StandardCharsets;
26import java.nio.charset.StandardCharsets;
21public class MainWidget {
28public class MainWidget {
@@ -42,6 +49,30 @@ public class MainWidget {
42 public void onPageFinished(WebView _view, String _url) {
49 public void onPageFinished(WebView _view, String _url) {
43 wv.evaluateJavascript(initialJS, null);
50 wv.evaluateJavascript(initialJS, null);
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"))
59+ String path = uri.getPath();
60+ path = getAssetPath(path);
62+ String mimeType = getMimeType(uri.toString());
63+ String encoding = "";
66+ InputStream data = a.getApplicationContext().getAssets().open(path);
67+ return new WebResourceResponse(mimeType, encoding, data);
69+ catch (IOException e) {
70+ Log.i("reflex", "Opening resource failed, Webview will handle the request ..");
47 wv.setWebChromeClient(new WebChromeClient() {
78 wv.setWebChromeClient(new WebChromeClient() {
@@ -82,6 +113,22 @@ public class MainWidget {
116+ private static String getMimeType(String url) {
118+ String extension = MimeTypeMap.getFileExtensionFromUrl(url);
119+ if (extension != null) {
120+ type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
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;
85 private static class JSaddleCallbacks {
132 private static class JSaddleCallbacks {
86 private final long callbacks;
133 private final long callbacks;
87 private native void startProcessing(long callbacks);
134 private native void startProcessing(long callbacks);