@@ -10,11 +10,16 @@ import android.webkit.JavascriptInterface;
1010import android.webkit.WebSettings;
1111import android.webkit.WebView;
1212import 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;
1318
1419import java.nio.charset.StandardCharsets;
1520
1621public 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) {
1823 CookieManager.setAcceptFileSchemeCookies(true); //TODO: Can we do this just for our own WebView?
1924
2025 // Remove title and notification bars
@@ -37,7 +42,27 @@ public class MainWidget {
3742 public void onPageFinished(WebView _view, String _url) {
3843 wv.evaluateJavascript(initialJS, null);
3944 }
40− });
45+ });
46+
47+ wv.setWebChromeClient(new WebChromeClient() {
48+ // Need to accept permissions to use the camera and audio
49+ @Override
50+ public void onPermissionRequest(final PermissionRequest request) {
51+ a.runOnUiThread(new Runnable() {
52+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
53+ @Override
54+ public void run() {
55+ // Make sure the request is coming from the file system ...
56+ if(request.getOrigin().toString().startsWith("file://")) {
57+ request.grant(request.getResources());
58+ }
59+ else {
60+ request.deny();
61+ }
62+ }
63+ });
64+ }
65+ });
4166
4267 wv.addJavascriptInterface(new JSaddleCallbacks(jsaddleCallbacks), "jsaddle");
4368