PermissionsKt

Handle Android Runtime Permissions in Kotlin way.

How to add

PermissionsKt is published with JitPack.io.
To add this library to your project, add these lines to your build.gradle

repositories {
    maven { url "https://jitpack.io" }
}

dependencies {
    implementation 'com.github.sembozdemir:PermissionsKt:1.0.0'
}

How to use

  • Prepare Manifest

Add the permission to AndroidManifest.xml.

<uses-permission android:name="android.permission.CAMERA"/>

  • Ask for permission

It is so simple. Just ask for permission you want anywhere on your Activity.

askPermissions(Manifest.permission.CAMERA) {
    onGranted {
        showCamera()
    }
}
  • Call delegated function

Call delegated extension function on onRequestPermissionsResult.

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    handlePermissionsResult(requestCode, permissions, grantResults)
}
  • Other callbacks

You may also listen onDenied, onShowRationale, onNeverAskAgain callbacks if you need. Call request.retry() on action after showing rationale message on onShowRationale.

askPermissions(Manifest.permission.CAMERA) {
    onGranted {
        showCamera()
    }

    onDenied {
        Log.d(TAG, "Camera permission is denied.")
    }

    onShowRationale { request ->
        Snackbar.make(rootView, "You should grant Camera permission", Snackbar.LENGTH_INDEFINITE)
                .setAction("Retry") { request.retry() }
                .show()
    }

    onNeverAskAgain {
        Log.d(TAG, "Never ask again for Camera permission")
    }
}
  • Multiple permissions

You may also ask for multiple permissions at the same time.

askPermissions(Manifest.permission.CALL_PHONE, Manifest.permission.READ_SMS) {
    onGranted {
        makeCall()
        sendSms()
    }

    onDenied { permissions ->
        permissions.forEach {
            when (it) {
                Manifest.permission.CALL_PHONE -> Log.d(TAG, "Call Phone is denied")
                Manifest.permission.READ_SMS -> Log.d(TAG, "Read Sms is denied")
            }
        }
    }

    onShowRationale { request ->
        Snackbar.make(rootView, "You should grant Call Phone and Read Sms permissions, Snackbar.LENGTH_INDEFINITE)
                .setAction("Retry") { request.retry() }
                .show()
    }

    onNeverAskAgain { permissions ->
        permissions.forEach {
            when (it) {
                Manifest.permission.CALL_PHONE -> Log.d(TAG, "Never ask again for Call Phone")
                Manifest.permission.READ_SMS -> Log.d(TAG, "Never ask again for Read Sms")
            }
        }
    }
}

You could view sample module for more details.

GitHub