Skip to content

Commit

Permalink
Merge pull request #190 from GetStream/require/audio-permission
Browse files Browse the repository at this point in the history
Implement EnsureAudioPermission
  • Loading branch information
skydoves authored Mar 15, 2024
2 parents 6edf88f + 7bd12cf commit cf78fa2
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 1 deletion.
2 changes: 2 additions & 0 deletions features/video/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ dependencies {
implementation(project(":core:network"))
implementation(project(":core:data"))

implementation(libs.accompanist.permissions)

implementation(libs.stream.video.compose)
implementation(libs.stream.video.mock)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package io.getstream.whatsappclone.video

import android.Manifest
import android.os.Build
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
Expand All @@ -36,6 +38,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.rememberMultiplePermissionsState
import io.getstream.video.android.compose.theme.VideoTheme
import io.getstream.video.android.compose.ui.components.call.activecall.CallContent
import io.getstream.video.android.compose.ui.components.call.controls.ControlActions
Expand All @@ -59,7 +63,7 @@ fun WhatsAppVideoCall(
) {
val uiState by viewModel.videoUiSate.collectAsStateWithLifecycle()

LaunchedEffect(key1 = id) {
EnsureAudioPermission {
viewModel.joinCall(type = "default", id = id.replace(":", ""))
}

Expand Down Expand Up @@ -210,3 +214,30 @@ private fun WhatsAppVideoCallContentPreview() {
) {}
}
}

@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun EnsureAudioPermission(onPermissionsGranted: () -> Unit) {
// While the SDK will handle the microphone permission,
// its not a bad idea to do it prior to entering any call UIs
val permissionsState = rememberMultiplePermissionsState(
permissions = buildList {
// Access to microphone
add(Manifest.permission.RECORD_AUDIO)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
// Allow for foreground service for notification on API 26+
add(Manifest.permission.FOREGROUND_SERVICE)
}
}
)

LaunchedEffect(key1 = Unit) {
permissionsState.launchMultiplePermissionRequest()
}

LaunchedEffect(key1 = permissionsState.allPermissionsGranted) {
if (permissionsState.allPermissionsGranted) {
onPermissionsGranted()
}
}
}
1 change: 1 addition & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ landscapist-animation = { group = "com.github.skydoves", name = "landscapist-ani
landscapist-placeholder = { group = "com.github.skydoves", name = "landscapist-placeholder", version.ref = "landscapist" }
accompanist-pager = { group = "com.google.accompanist", name = "accompanist-pager", version.ref = "accompanist" }
accompanist-indicator = { group = "com.google.accompanist", name = "accompanist-pager-indicators", version.ref = "accompanist" }
accompanist-permissions = { group = "com.google.accompanist", name = "accompanist-permissions", version.ref = "accompanist" }
android-desugarJdkLibs = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "androidDesugarJdkLibs" }
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "androidxActivity" }
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "androidxAppCompat" }
Expand Down

0 comments on commit cf78fa2

Please sign in to comment.