33import android .Manifest ;
44import android .annotation .TargetApi ;
55import android .app .Activity ;
6+ import android .app .AlertDialog ;
7+ import android .content .DialogInterface ;
68import android .content .pm .PackageManager ;
79import android .net .Uri ;
810import android .os .Build ;
11+ import android .os .Handler ;
912import android .os .Message ;
1013import android .view .Gravity ;
1114import android .view .View ;
1215import android .view .ViewGroup ;
1316import android .webkit .ConsoleMessage ;
1417import android .webkit .GeolocationPermissions ;
18+ import android .webkit .JsPromptResult ;
1519import android .webkit .PermissionRequest ;
1620import android .webkit .ValueCallback ;
1721import android .webkit .WebChromeClient ;
1822import android .webkit .WebView ;
1923import android .webkit .WebViewClient ;
24+ import android .widget .Button ;
2025import android .widget .FrameLayout ;
2126
2227import androidx .annotation .RequiresApi ;
@@ -153,11 +158,14 @@ public void onPermissionRequest(final PermissionRequest request) {
153158 ArrayList <String > requestedAndroidPermissions = new ArrayList <>();
154159 for (String requestedResource : request .getResources ()) {
155160 String androidPermission = null ;
161+ String requestPermissionIdentifier = null ;
156162
157163 if (requestedResource .equals (PermissionRequest .RESOURCE_AUDIO_CAPTURE )) {
158164 androidPermission = Manifest .permission .RECORD_AUDIO ;
165+ requestPermissionIdentifier = "microphone" ;
159166 } else if (requestedResource .equals (PermissionRequest .RESOURCE_VIDEO_CAPTURE )) {
160167 androidPermission = Manifest .permission .CAMERA ;
168+ requestPermissionIdentifier = "camera" ;
161169 } else if (requestedResource .equals (PermissionRequest .RESOURCE_PROTECTED_MEDIA_ID )) {
162170 if (mAllowsProtectedMedia ) {
163171 grantedPermissions .add (requestedResource );
@@ -170,8 +178,12 @@ public void onPermissionRequest(final PermissionRequest request) {
170178 * Find more details here: https://github.com/react-native-webview/react-native-webview/pull/2732
171179 */
172180 androidPermission = PermissionRequest .RESOURCE_PROTECTED_MEDIA_ID ;
173- } }
181+ }
182+ }
183+ Uri originUri = request .getOrigin ();
184+ String host = originUri .getHost ();
174185 // TODO: RESOURCE_MIDI_SYSEX, RESOURCE_PROTECTED_MEDIA_ID.
186+ String alertMessage = String .format ("Allow " + host + " to use your " + requestPermissionIdentifier + "?" );
175187 if (androidPermission != null ) {
176188 if (ContextCompat .checkSelfPermission (this .mWebView .getThemedReactContext (), androidPermission ) == PackageManager .PERMISSION_GRANTED ) {
177189 AlertDialog .Builder builder = new AlertDialog .Builder (this .mWebView .getContext ());
@@ -212,6 +224,10 @@ public void onPermissionRequest(final PermissionRequest request) {
212224 requestPermissions (requestedAndroidPermissions );
213225 }
214226
227+ private void runDelayed (Runnable function , long delayMillis ) {
228+ Handler handler = new Handler ();
229+ handler .postDelayed (function , delayMillis );
230+ }
215231
216232 @ Override
217233 public void onGeolocationPermissionsShowPrompt (String origin , GeolocationPermissions .Callback callback ) {
0 commit comments