I tried to render a alert dialog when the user don't allow the permission, although the Queue is being filled with the necessary permissions, but the PermissionDialog is not being rendered on the screen. These print statements are also not being logged: println("above alert dialog"), println(dialogQueue) in jetpack compose. Thankyou in Advance for addressing this problem with a solution.
class MainActivity : ComponentActivity() {
private val permissions = mutableListOf(
android.Manifest.permission.ACCESS_COARSE_LOCATION,
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
permissions.add(android.Manifest.permission.POST_NOTIFICATIONS)
}
setContent {
PermissionsTheme {
val viewModel = viewModel<MainViewModel>()
val dialogQueue = viewModel.visiblePermissionDialogQueue
val multiplePermissionResultLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.RequestMultiplePermissions(),
onResult = { perms ->
permissions.forEach { eachPermission ->
viewModel.onPermissionResult(
permission = eachPermission,
isGranted = perms[eachPermission] == true
)
}
println(perms)
}
)
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Column(
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Button(onClick = { multiplePermissionResultLauncher.launch(permissions.toTypedArray()) }) {
Text(text = "click")
}
}
println("above alert dialog")
println(dialogQueue)
dialogQueue
.forEach { permission ->
println("Queue is being called")
PermissionDialog(
permissionTextProvider = when (permission) {
android.Manifest.permission.ACCESS_COARSE_LOCATION -> {
LocationPermissionTextProvider()
}
android.Manifest.permission.POST_NOTIFICATIONS -> {
NotificationPermissionTextProvider()
}
else -> return@forEach
},
isPermanentlyDeclined = !shouldShowRequestPermissionRationale(
permission
),
onDismiss = viewModel::dismissDialog,
onOkClick = {
viewModel.dismissDialog()
multiplePermissionResultLauncher.launch(
arrayOf(permission)
)
},
onGoToAppSettingsClick = ::openAppSettings
)
}
}
}
}
}
}
fun Activity.openAppSettings() {
Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", packageName, null)
).also(::startActivity)
}