1616
1717package  io.getstream.whatsappclone.video 
1818
19+ import  android.Manifest 
20+ import  android.os.Build 
1921import  androidx.compose.foundation.layout.Box 
2022import  androidx.compose.foundation.layout.fillMaxSize 
2123import  androidx.compose.foundation.layout.size 
@@ -36,6 +38,8 @@ import androidx.compose.ui.unit.dp
3638import  androidx.compose.ui.unit.sp 
3739import  androidx.hilt.navigation.compose.hiltViewModel 
3840import  androidx.lifecycle.compose.collectAsStateWithLifecycle 
41+ import  com.google.accompanist.permissions.ExperimentalPermissionsApi 
42+ import  com.google.accompanist.permissions.rememberMultiplePermissionsState 
3943import  io.getstream.video.android.compose.theme.VideoTheme 
4044import  io.getstream.video.android.compose.ui.components.call.activecall.CallContent 
4145import  io.getstream.video.android.compose.ui.components.call.controls.ControlActions 
@@ -59,7 +63,7 @@ fun WhatsAppVideoCall(
5963) {
6064  val  uiState by viewModel.videoUiSate.collectAsStateWithLifecycle()
6165
62-   LaunchedEffect (key1  =  id)  {
66+   EnsureAudioPermission  {
6367    viewModel.joinCall(type =  " default"  , id =  id.replace(" :"  , " "  ))
6468  }
6569
@@ -210,3 +214,30 @@ private fun WhatsAppVideoCallContentPreview() {
210214    ) {}
211215  }
212216}
217+ 
218+ @OptIn(ExperimentalPermissionsApi ::class )
219+ @Composable
220+ fun  EnsureAudioPermission (onPermissionsGranted :  () ->  Unit ) {
221+   //  While the SDK will handle the microphone permission,
222+   //  its not a bad idea to do it prior to entering any call UIs
223+   val  permissionsState =  rememberMultiplePermissionsState(
224+     permissions =  buildList {
225+       //  Access to microphone
226+       add(Manifest .permission.RECORD_AUDIO )
227+       if  (Build .VERSION .SDK_INT  >=  Build .VERSION_CODES .P ) {
228+         //  Allow for foreground service for notification on API 26+
229+         add(Manifest .permission.FOREGROUND_SERVICE )
230+       }
231+     }
232+   )
233+ 
234+   LaunchedEffect (key1 =  Unit ) {
235+     permissionsState.launchMultiplePermissionRequest()
236+   }
237+ 
238+   LaunchedEffect (key1 =  permissionsState.allPermissionsGranted) {
239+     if  (permissionsState.allPermissionsGranted) {
240+       onPermissionsGranted()
241+     }
242+   }
243+ }
0 commit comments