@@ -10,11 +10,16 @@ import android.webkit.JavascriptInterface;
10import android.webkit.WebSettings;
10import android.webkit.WebSettings;
11import android.webkit.WebView;
11import android.webkit.WebView;
12import android.webkit.WebViewClient;
12import 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;
14import java.nio.charset.StandardCharsets;
19import java.nio.charset.StandardCharsets;
16public class MainWidget {
21public class MainWidget {
17− private static Object startMainWidget(Activity a, String url, long jsaddleCallbacks, final String initialJS) {
22+ private static Object startMainWidget(final Activity a, String url, long jsaddleCallbacks, final String initialJS) {
18 CookieManager.setAcceptFileSchemeCookies(true); //TODO: Can we do this just for our own WebView?
23 CookieManager.setAcceptFileSchemeCookies(true); //TODO: Can we do this just for our own WebView?
20 // Remove title and notification bars
25 // Remove title and notification bars
@@ -37,7 +42,27 @@ public class MainWidget {
37 public void onPageFinished(WebView _view, String _url) {
42 public void onPageFinished(WebView _view, String _url) {
38 wv.evaluateJavascript(initialJS, null);
43 wv.evaluateJavascript(initialJS, null);
47+ wv.setWebChromeClient(new WebChromeClient() {
48+ // Need to accept permissions to use the camera and audio
50+ public void onPermissionRequest(final PermissionRequest request) {
51+ a.runOnUiThread(new Runnable() {
52+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
55+ // Make sure the request is coming from the file system ...
56+ if(request.getOrigin().toString().startsWith("file://")) {
57+ request.grant(request.getResources());
42 wv.addJavascriptInterface(new JSaddleCallbacks(jsaddleCallbacks), "jsaddle");
67 wv.addJavascriptInterface(new JSaddleCallbacks(jsaddleCallbacks), "jsaddle");