|
@@ -5,12 +5,15 @@ import android.annotation.TargetApi;
|
5
|
5
|
import android.app.DownloadManager;
|
6
|
6
|
import android.content.Context;
|
7
|
7
|
import android.content.Intent;
|
|
8
|
+import android.content.pm.PackageManager;
|
8
|
9
|
import android.graphics.Bitmap;
|
9
|
10
|
import android.graphics.Color;
|
|
11
|
+import android.Manifest;
|
10
|
12
|
import android.net.Uri;
|
11
|
13
|
import android.os.Build;
|
12
|
14
|
import android.os.Environment;
|
13
|
15
|
import androidx.annotation.RequiresApi;
|
|
16
|
+import androidx.core.content.ContextCompat;
|
14
|
17
|
import android.text.TextUtils;
|
15
|
18
|
import android.view.Gravity;
|
16
|
19
|
import android.view.View;
|
|
@@ -22,6 +25,7 @@ import android.webkit.CookieManager;
|
22
|
25
|
import android.webkit.DownloadListener;
|
23
|
26
|
import android.webkit.GeolocationPermissions;
|
24
|
27
|
import android.webkit.JavascriptInterface;
|
|
28
|
+import android.webkit.PermissionRequest;
|
25
|
29
|
import android.webkit.URLUtil;
|
26
|
30
|
import android.webkit.ValueCallback;
|
27
|
31
|
import android.webkit.WebChromeClient;
|
|
@@ -65,6 +69,7 @@ import java.io.UnsupportedEncodingException;
|
65
|
69
|
import java.net.MalformedURLException;
|
66
|
70
|
import java.net.URL;
|
67
|
71
|
import java.net.URLEncoder;
|
|
72
|
+import java.util.ArrayList;
|
68
|
73
|
import java.util.HashMap;
|
69
|
74
|
import java.util.Locale;
|
70
|
75
|
import java.util.Map;
|
|
@@ -763,6 +768,41 @@ public class RNCWebViewManager extends SimpleViewManager<WebView> {
|
763
|
768
|
return true;
|
764
|
769
|
}
|
765
|
770
|
|
|
771
|
+ // Fix WebRTC permission request error.
|
|
772
|
+ @Override
|
|
773
|
+ public void onPermissionRequest(final PermissionRequest request) {
|
|
774
|
+ String[] requestedResources = request.getResources();
|
|
775
|
+ ArrayList<String> permissions = new ArrayList<>();
|
|
776
|
+ ArrayList<String> grantedPermissions = new ArrayList<String>();
|
|
777
|
+ for (int i = 0; i < requestedResources.length; i++) {
|
|
778
|
+ if (requestedResources[i].equals(PermissionRequest.RESOURCE_AUDIO_CAPTURE)) {
|
|
779
|
+ permissions.add(Manifest.permission.RECORD_AUDIO);
|
|
780
|
+ } else if (requestedResources[i].equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) {
|
|
781
|
+ permissions.add(Manifest.permission.CAMERA);
|
|
782
|
+ }
|
|
783
|
+ // TODO: RESOURCE_MIDI_SYSEX, RESOURCE_PROTECTED_MEDIA_ID.
|
|
784
|
+ }
|
|
785
|
+
|
|
786
|
+ for (int i = 0; i < permissions.size(); i++) {
|
|
787
|
+ if (ContextCompat.checkSelfPermission(mReactContext, permissions.get(i)) != PackageManager.PERMISSION_GRANTED) {
|
|
788
|
+ continue;
|
|
789
|
+ }
|
|
790
|
+ if (permissions.get(i).equals(Manifest.permission.RECORD_AUDIO)) {
|
|
791
|
+ grantedPermissions.add(PermissionRequest.RESOURCE_AUDIO_CAPTURE);
|
|
792
|
+ } else if (permissions.get(i).equals(Manifest.permission.CAMERA)) {
|
|
793
|
+ grantedPermissions.add(PermissionRequest.RESOURCE_VIDEO_CAPTURE);
|
|
794
|
+ }
|
|
795
|
+ }
|
|
796
|
+
|
|
797
|
+ if (grantedPermissions.isEmpty()) {
|
|
798
|
+ request.deny();
|
|
799
|
+ } else {
|
|
800
|
+ String[] grantedPermissionsArray = new String[grantedPermissions.size()];
|
|
801
|
+ grantedPermissionsArray = grantedPermissions.toArray(grantedPermissionsArray);
|
|
802
|
+ request.grant(grantedPermissionsArray);
|
|
803
|
+ }
|
|
804
|
+ }
|
|
805
|
+
|
766
|
806
|
@Override
|
767
|
807
|
public void onProgressChanged(WebView webView, int newProgress) {
|
768
|
808
|
super.onProgressChanged(webView, newProgress);
|
|
@@ -1010,4 +1050,4 @@ public class RNCWebViewManager extends SimpleViewManager<WebView> {
|
1010
|
1050
|
}
|
1011
|
1051
|
}
|
1012
|
1052
|
}
|
1013
|
|
-}
|
|
1053
|
+}
|