English | Русский
PermKit is a lightweight Android toolkit for runtime permissions. It provides a clean core API and integration modules for both classic View UI and Jetpack Compose.
- Minimal and explicit permission request API.
- Deferred launch model (
request(...).start()). - Separate integration modules for View and Compose.
- Utility helpers for common permission scenarios.
core: Core contracts and result helpers.view:Activity/Fragmentintegration via Activity Result API.compose: Compose integration viarememberLauncherForActivityResult.utils: Convenience extension functions and typed utility result.
dependencies {
implementation("ru.dapadz.permkit:core:1.0.0")
// Choose one UI integration module (or use both if needed)
implementation("ru.dapadz.permkit:view:1.0.0")
implementation("ru.dapadz.permkit:compose:1.0.0")
// Optional utility extensions
implementation("ru.dapadz.permkit:utils:1.0.0")
}import ru.dapadz.permkit.view.permissionRequester
class CameraFragment : Fragment() {
private val permissionRequester by permissionRequester()
fun onCameraClick() {
permissionRequester
.request(Manifest.permission.CAMERA) { result ->
if (result.isAllGranted) {
openCamera()
}
}
.start()
}
}For advanced or explicit construction flows, you can still create a requester via
PermissionRequesterFactory(this).create().
@Composable
fun NotificationPermissionButton() {
val permissionRequester = rememberPermissionRequester()
Button(
onClick = {
permissionRequester
.request(Manifest.permission.POST_NOTIFICATIONS) { result ->
if (result.isAllGranted) {
// Permission granted
}
}
.start()
}
) {
Text("Request notification permission")
}
}utils adds predefined helpers:
requestStoragePermission(...)requestCameraPermission(...)requestNotificationPermission(...)
Each helper returns a typed PermissionPresets.Result with either Success or Denied.
Issues and pull requests are welcome. When contributing, please include:
- clear behavior description,
- reproducible steps,
- tests or sample usage for changes when possible.
PermKit is distributed under the Apache License 2.0. See LICENSE.