
Opinionated camera-permission handling for declarative UI, wrapping camera-requiring content in a single composable; manages rationale, permanent-denial flows, settings redirection and removes boilerplate.
Kotlin Multiplatform library for opinionated camera permission handling with Compose Multiplatform UI
for Android and iOS.
Requires Compose Multiplatform 1.9.0+ (provided by consumer).
// settings.gradle.kts (root)
dependencyResolutionManagement {
repositories {
mavenCentral()
}
}
// shared/build.gradle.kts
kotlin {
sourceSets {
val commonMain by getting {
dependencies {
implementation("io.github.popradiarpad:ensure-camera-permission:1.0.0")
}
}
}
}The EnsureCameraPermission composable is designed to wrap content that requires camera access,
managing the platform-specific permission flows and dialogs for you.
It adheres strictly to Android and iOS best practices, ensuring a smooth user experience by incorporating the Rationale step and guiding the user to App Settings when access is permanently denied.
To maintain clean code, create a thin wrapper.
// MyPermissionWrappers.kt
@Composable
fun EnsureCameraPermission(
whenPermissionGranted: @Composable () -> Unit,
) {
EnsureCameraPermission(
permissionRequestDialogTitle = "Camera Access is Required",
rationale = "PoseDetector needs access to your camera to show pose landmarks.",
// Android Dialog Buttons
rationaleAcceptedText = "Accept",
rationaleDeniedText = "Not now",
// Permanent Denial Buttons
toSettingsText = "Settings",
cancelToSettingsText = "Cancel",
whenPermissionNotGrantedBackground = { PermissionNotGrantedBackground() },
whenPermissionGranted = whenPermissionGranted
)
}
@Composable
private fun PermissionNotGrantedBackground() {
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
Text("Camera permission is required.")
}
}
// CameraFeatureScreen.kt
@Composable
fun CameraFeatureScreen() {
EnsureCameraPermission {
// When permission is GRANTED
}
}compileSdk) is installed in Android Studio → SDK Manager.See the full working demo in my cross-platform PoseDetector app: https://github.com/PopradiArpad/PoseDetector
Kotlin Multiplatform library for opinionated camera permission handling with Compose Multiplatform UI
for Android and iOS.
Requires Compose Multiplatform 1.9.0+ (provided by consumer).
// settings.gradle.kts (root)
dependencyResolutionManagement {
repositories {
mavenCentral()
}
}
// shared/build.gradle.kts
kotlin {
sourceSets {
val commonMain by getting {
dependencies {
implementation("io.github.popradiarpad:ensure-camera-permission:1.0.0")
}
}
}
}The EnsureCameraPermission composable is designed to wrap content that requires camera access,
managing the platform-specific permission flows and dialogs for you.
It adheres strictly to Android and iOS best practices, ensuring a smooth user experience by incorporating the Rationale step and guiding the user to App Settings when access is permanently denied.
To maintain clean code, create a thin wrapper.
// MyPermissionWrappers.kt
@Composable
fun EnsureCameraPermission(
whenPermissionGranted: @Composable () -> Unit,
) {
EnsureCameraPermission(
permissionRequestDialogTitle = "Camera Access is Required",
rationale = "PoseDetector needs access to your camera to show pose landmarks.",
// Android Dialog Buttons
rationaleAcceptedText = "Accept",
rationaleDeniedText = "Not now",
// Permanent Denial Buttons
toSettingsText = "Settings",
cancelToSettingsText = "Cancel",
whenPermissionNotGrantedBackground = { PermissionNotGrantedBackground() },
whenPermissionGranted = whenPermissionGranted
)
}
@Composable
private fun PermissionNotGrantedBackground() {
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
Text("Camera permission is required.")
}
}
// CameraFeatureScreen.kt
@Composable
fun CameraFeatureScreen() {
EnsureCameraPermission {
// When permission is GRANTED
}
}compileSdk) is installed in Android Studio → SDK Manager.See the full working demo in my cross-platform PoseDetector app: https://github.com/PopradiArpad/PoseDetector