|
|
@@ -1,92 +0,0 @@
|
|
|
-package com.sirekanyan.knigopis.common.android.permissions
|
|
|
-
|
|
|
-import android.content.pm.PackageManager.PERMISSION_DENIED
|
|
|
-import android.content.pm.PackageManager.PERMISSION_GRANTED
|
|
|
-import android.view.View
|
|
|
-import androidx.appcompat.app.AlertDialog
|
|
|
-import androidx.appcompat.app.AppCompatActivity
|
|
|
-import androidx.core.app.ActivityCompat
|
|
|
-import androidx.core.content.ContextCompat
|
|
|
-import com.google.android.material.snackbar.Snackbar
|
|
|
-import com.sirekanyan.knigopis.R
|
|
|
-import com.sirekanyan.knigopis.common.android.permissions.Permissions.Callback
|
|
|
-import com.sirekanyan.knigopis.common.functions.createAppSettingsIntent
|
|
|
-import com.sirekanyan.knigopis.repository.Configuration
|
|
|
-
|
|
|
-interface Permissions {
|
|
|
-
|
|
|
- fun requestPermission(permission: Permission)
|
|
|
- fun submitResult(result: PermissionResult)
|
|
|
-
|
|
|
- interface Callback {
|
|
|
-
|
|
|
- fun onGranted(permission: Permission)
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-class PermissionsImpl(
|
|
|
- private val activity: AppCompatActivity,
|
|
|
- private val config: Configuration
|
|
|
-) : Permissions {
|
|
|
-
|
|
|
- lateinit var callback: Callback
|
|
|
-
|
|
|
- override fun requestPermission(permission: Permission) {
|
|
|
- when (ContextCompat.checkSelfPermission(activity, permission.key)) {
|
|
|
- PERMISSION_GRANTED -> callback.onGranted(permission)
|
|
|
- PERMISSION_DENIED -> onPermissionDenied(permission)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private fun onPermissionDenied(permission: Permission) {
|
|
|
- if (ActivityCompat.shouldShowRequestPermissionRationale(activity, permission.key)) {
|
|
|
- showRationaleDialog {
|
|
|
- requestPermission(permission, permission.rationaleRequestCode)
|
|
|
- }
|
|
|
- } else {
|
|
|
- requestPermission(permission, permission.requestCode)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private fun requestPermission(permission: Permission, requestCode: Int) {
|
|
|
- ActivityCompat.requestPermissions(activity, arrayOf(permission.key), requestCode)
|
|
|
- }
|
|
|
-
|
|
|
- override fun submitResult(result: PermissionResult) {
|
|
|
- when {
|
|
|
- result.isGranted() -> {
|
|
|
- callback.onGranted(result.permission)
|
|
|
- }
|
|
|
- result.isRegularRequest() -> {
|
|
|
- if (config.shouldShowSettings) {
|
|
|
- showSettingsDialog()
|
|
|
- }
|
|
|
- config.shouldShowSettings = true
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private inline fun showRationaleDialog(crossinline onAllowed: () -> Unit) {
|
|
|
- AlertDialog.Builder(activity)
|
|
|
- .setTitle(R.string.permissions_title)
|
|
|
- .setMessage(R.string.permissions_message_rationale)
|
|
|
- .setPositiveButton(R.string.permissions_button_rationale) { _, _ -> onAllowed() }
|
|
|
- .setNegativeButton(R.string.common_button_cancel, null)
|
|
|
- .setCancelable(false)
|
|
|
- .show()
|
|
|
- }
|
|
|
-
|
|
|
- private fun showSettingsDialog() {
|
|
|
- val contentView = activity.findViewById<View>(android.R.id.content)
|
|
|
- Snackbar.make(contentView, R.string.permissions_message_settings, Snackbar.LENGTH_LONG)
|
|
|
- .setAction(R.string.permissions_button_settings) { openSettings() }
|
|
|
- .show()
|
|
|
- }
|
|
|
-
|
|
|
- private fun openSettings() {
|
|
|
- activity.startActivity(activity.createAppSettingsIntent())
|
|
|
- }
|
|
|
-
|
|
|
-}
|