on develop help sign in
Handle onPermissionRequest

It should be fine to grant permissions if the origin is a file:// url. This is needed for getUserMedia to work.

commit448b48f8c59684745e7e6d6dab83f3b284743983 authorRobert Klotzner <robert.klotzner@gmx.at> dateWed 8 Nov 2017, 10:45 (9 years ago) parent17af349
1 file changed+27−2
reflex-dom/java/org/reflexfrp/reflexdom/MainWidget.java+27−2
reflex-dom/java/org/reflexfrp/reflexdom/MainWidget.java+27−2
@@ -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