Need help with eazypermissions?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

sagar-viradiya
220 Stars 22 Forks Apache License 2.0 168 Commits 3 Opened issues

Description

Android library to handle runtime permission through Kotlin coroutines and Livedata.

Services available

!
?

Need anything else?

Contributors list

# 37,237
Kotlin
runtime...
Android
kotlin-...
112 commits
# 518,586
Kotlin
Java
kotlin-...
runtime...
6 commits

Eazy Runtime Permission

License Pull request API ktlint Android Arsenal

A lightweight Android library which wraps boilerplate code of runtime permission and allows you to request permissions 1. from coroutines. (No callbacks yay :tada:) 2. request and observe permissions through LiveData. 3. through clean and concise Kotlin DSL.

From release

2.0.0
onwards library is migrated to AndroidX. If you are still using support library and haven't migrated to AndroidX then check out non-androidX version of the library.

Including in your project

Eazy permissions is available in the Jcenter and divided into three modules so that based on your need you can include either coroutines or livedata or Kotlin DSL support in your project

//For coroutines
implementation 'com.sagar:coroutinespermission:[latest_version]'

//For LiveData implementation 'com.sagar:livedatapermission:[latest_version]'

//For Kotlin DSL implementation 'com.sagar:dslpermission:[latest_version]'

  • latest_version
    for coroutines - Download
  • latest_version
    for livedata - Download
  • latest_version
    for Kotlin DSL - Download

Coroutines support

This is how you would request permission within coroutines.

.
.
.
launch {
    //CoroutineScope

val permissionResult = PermissionManager.requestPermissions(           //Suspends the coroutine
                        [email protected],                                  
                        REQUEST_ID,
                        Manifest.permission.ACCESS_FINE_LOCATION,
                        Manifest.permission.READ_CONTACTS,
                        Manifest.permission.CAMERA
                    )

//Resume coroutine once result is ready
when(permissionResult) {
    is PermissionResult.PermissionGranted -> {
        //Add your logic here after user grants permission(s)
    }
    is PermissionResult.PermissionDenied -> {
        //Add your logic to handle permission denial
    }
    is PermissionResult.PermissionDeniedPermanently -> {
        //Add your logic here if user denied permission(s) permanently.
        //Ideally you should ask user to manually go to settings and enable permission(s)
    }
    is PermissionResult.ShowRational -> {
        //If user denied permission frequently then she/he is not clear about why you are asking this permission.
        //This is your chance to explain them why you need permission.
    }
}

}

Read more about coroutines support here

Kotlin DSL support

This is how you would request permission through clean and concise Kotlin DSL.

requestPermissions(
    Manifest.permission.ACCESS_FINE_LOCATION,
    Manifest.permission.READ_CONTACTS,
    Manifest.permission.CAMERA
) {
    requestCode = 4
    resultCallback = {
        when(this) {
            is PermissionResult.PermissionGranted -> {
                //Add your logic here after user grants permission(s)
            }
            is PermissionResult.PermissionDenied -> {
                //Add your logic to handle permission denial
            }
            is PermissionResult.PermissionDeniedPermanently -> {
                //Add your logic here if user denied permission(s) permanently.
                //Ideally you should ask user to manually go to settings and enable permission(s)
            }
            is PermissionResult.ShowRational -> {
                //If user denied permission frequently then she/he is not clear about why you are asking this permission.
                //This is your chance to explain them why you need permission.
            }
        }
    }
}

Read more about Kotlin DSL support here

LiveData support

This is how you would request permission within Acivity/Fragment.

PermissionManager.requestPermissions(
                this,
                REQUEST_ID,
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.READ_CONTACTS
            )

Observing permission result requires your Actvity/Fragment to implement

PermissionObserver

/**
 * Interface definition for a callback to get [LiveData] of [PermissionResult]
 *
 * Implement this interface to get [LiveData] for observing permission request result.
 */
interface PermissionObserver {
    fun setupObserver(permissionResultLiveData: LiveData)
}

Just as you would observe other LiveData you can observe LiveData<

PermissionResult
> as follow.

kotlin
override fun setupObserver(permissionResultLiveData: LiveData) {
    permissionResultLiveData.observe(this, Observer {
        when (it) {
            is PermissionResult.PermissionGranted -> {
                if (it.requestId == REQUEST_ID) {
                    //Add your logic here after user grants permission(s)
                }
            }
            is PermissionResult.PermissionDenied -> {
                if (it.requestId == REQUEST_ID) {
                    //Add your logic to handle permission denial
                }
            }
            is PermissionResult.PermissionDeniedPermanently -> {
                if (it.requestId == REQUEST_ID) {
                    //Add your logic here if user denied permission(s) permanently.
                    //Ideally you should ask user to manually go to settings and enable permission(s)
                }
            }
            is PermissionResult.ShowRational -> {
                if (it.requestId == REQUEST_ID) {
                    //If user denied permission frequently then she/he is not clear about why you are asking this permission.
                    //This is your chance to explain them why you need permission.
                }
            }
        }
    })
}
Read more about LiveData support here

Contributing

Have suggestions for improvements and want to contribute? or Found any issues?
Head over to Contribution guidelines to know more about contributing to this library.

Screenshots of sample

sc1 sc2
sc1 sc2

License

Copyright 2019 Sagar Viradiya

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.