Request-Permission-Compose ![](https://camo.githubusercontent.com/ac37d899cfdfa1746016cb2a8b7406de2e7045be1e24436f9738dbff6d8eee43/68747470733a2f2f6a69747061636b2e696f2f762f4d7368617269416c7361796172692f526571756573742d5065726d697373696f6e2d436f6d706f73652e737667)
Introduction
This is an Android Library that’s implemented in JetpackCompoe to help you to request a single permission or multiple permissions on runtime.
Setup
Step1: settings.gradle
repositories {
...
maven { url 'https://jitpack.io' }
}
Step2: add the dependency
dependencies {
...
implementation 'com.github.MshariAlsayari:Request-Permission-Compose:<last-version>'
}
Functions
Single
@Composable
fun SinglePermission(
permission: String,
rationalDialogParams: DialogParams? = null,
deniedDialogParams: DialogParams? = null,
isGranted: () -> Unit,
onDone: () -> Unit,
)
Multiple
@Composable
fun MultiplePermissions(
permissions: List<String>,
rationalDialogParams: DialogParams? = null,
deniedDialogParams: DialogParams? = null,
isGranted: () -> Unit,
onDone: () -> Unit
)
Full Example
@Composable
fun HomeScreen() {
val context = LocalContext.current
var openGallery by remember { mutableStateOf(false) }
var openCameraAndMic by remember { mutableStateOf(false) }
val galleryLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.GetContent(),
onResult = { uri: Uri? ->
}
)
if (openGallery){
SinglePermission(
permission = Manifest.permission.READ_EXTERNAL_STORAGE,
rationalDialogParams = DialogParams(
title = R.string.galleryRequestPermissionDialogTitle,
message = R.string.galleryRequestPermissionDialogBody,
icon = R.drawable.baseline_info_24
),
deniedDialogParams = DialogParams(
title = R.string.galleryDeniedPermissionDialogTitle,
message = R.string.galleryDeniedPermissionDialogBody,
positiveButtonText = R.string.openSettings
),
isGranted = {
galleryLauncher.launch("image/*")
},
onDone = {
openGallery = false
}
)
}
if(openCameraAndMic){
MultiplePermissions(
permissions = listOf(Manifest.permission.CAMERA,Manifest.permission.RECORD_AUDIO),
rationalDialogParams = DialogParams(
title = R.string.micAndCameraPermissionDialogTitle,
message = R.string.micAndCameraPermissionDialogBody,
icon = R.drawable.baseline_info_24
),
deniedDialogParams = DialogParams(
title = R.string.micAndCameraDeniedPermissionDialogTitle,
message = R.string.micAndCameraDeniedPermissionDialogBody,
positiveButtonText = R.string.openSettings
),
isGranted = {
Toast.makeText(context, R.string.micAndCameraGranted,Toast.LENGTH_LONG).show()
},
onDone = {
openCameraAndMic = false
}
)
}
Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
GalleryButton(onClick = {
openGallery = true
})
CameraAndMic(onClick = {
openCameraAndMic = true
})
}
}
@Composable
fun GalleryButton(onClick:()->Unit = {}) {
MyButton(text = "Storage", onClick = onClick)
}
@Composable
fun CameraAndMic(onClick:()->Unit = {}) {
MyButton(text = "Camera and Mic", onClick = onClick)
}
@Composable
fun MyButton(text: String, onClick:()->Unit = {}) {
Button(onClick = { onClick() }) {
Text(text = text)
}
}