Skip to content

Instantly share code, notes, and snippets.

@Morteza-QN
Created March 19, 2023 06:11
Show Gist options
  • Save Morteza-QN/657333571e49c79700f330eeea6e3c7c to your computer and use it in GitHub Desktop.
Save Morteza-QN/657333571e49c79700f330eeea6e3c7c to your computer and use it in GitHub Desktop.
permission runtime management
import android.Manifest
object Permissions {
const val CAMERA = Manifest.permission.CAMERA
const val READ_EXTERNAL_STORAGE = Manifest.permission.READ_EXTERNAL_STORAGE
const val WRITE_EXTERNAL_STORAGE = Manifest.permission.WRITE_EXTERNAL_STORAGE
}
interface PermissionsManager {
fun requestPermission(permission: String, requestCode: Int)
fun isPermissionGranted(permission: String): Boolean
fun showPermissionDeniedSnackbar(permission: String)
fun showPermissionDeniedDialog(permission: String, negativeButtonAction: () -> Unit)
}
import android.app.Activity
import android.content.pm.PackageManager
import androidx.appcompat.app.AlertDialog
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.google.android.material.snackbar.Snackbar
class PermissionsServiceImpl(private val activity: Activity) : PermissionsManager {
override fun requestPermission(permission: String, requestCode: Int) {
ActivityCompat.requestPermissions(activity, arrayOf(permission), requestCode)
}
override fun isPermissionGranted(permission: String): Boolean {
return ContextCompat.checkSelfPermission(activity, permission) == PackageManager.PERMISSION_GRANTED
}
override fun showPermissionDeniedSnackbar(permission: String) {
Snackbar.make(activity.findViewById(android.R.id.content),
"Permission Denied: $permission",
Snackbar.LENGTH_SHORT)
.show()
}
override fun showPermissionDeniedDialog(permission: String, negativeButtonAction: () -> Unit) {
AlertDialog.Builder(activity)
.setTitle("Permission Needed")
.setMessage("The app needs $permission permission to function.")
.setCancelable(false)
.setPositiveButton("Grant Access") { _, _ ->
val PERMISSION_REQUEST_CODE = 0
requestPermission(permission, PERMISSION_REQUEST_CODE)
}
.setNegativeButton("Do not Allow") { _, _ ->
negativeButtonAction.invoke()
}
.show()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment