Created
March 19, 2023 06:11
-
-
Save Morteza-QN/657333571e49c79700f330eeea6e3c7c to your computer and use it in GitHub Desktop.
permission runtime management
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface PermissionsManager { | |
fun requestPermission(permission: String, requestCode: Int) | |
fun isPermissionGranted(permission: String): Boolean | |
fun showPermissionDeniedSnackbar(permission: String) | |
fun showPermissionDeniedDialog(permission: String, negativeButtonAction: () -> Unit) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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