on develop help sign in
Merge branch 're-route_to_android_asset' of https://github.com/eskimor/reflex-dom into develop
188fe48Ryan Trinkle
reflex-dom/java/org/reflexfrp/reflexdom/MainWidget.java+53−6
@@ -1,21 +1,28 @@
1package org.reflexfrp.reflexdom;
1package org.reflexfrp.reflexdom;
2
2
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;
18−
19import java.nio.charset.StandardCharsets;
26import java.nio.charset.StandardCharsets;
20
27
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);
44 }
51 }
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+ }
45 });
76 });
46
77
47 wv.setWebChromeClient(new WebChromeClient() {
78 wv.setWebChromeClient(new WebChromeClient() {
@@ -82,6 +113,22 @@ public class MainWidget {
82 };
113 };
83 }
114 }
84
115
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+
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);