Skip to content
This repository has been archived by the owner on Nov 21, 2023. It is now read-only.

Commit

Permalink
Rename exception properties
Browse files Browse the repository at this point in the history
Less redundant names.
  • Loading branch information
gabrielfeo committed May 30, 2020
1 parent db1b857 commit 51a8806
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ package com.gabrielfeo.suspend.permission.assurer
/**
* Requested or verified permissions have been denied.
*
* @property deniedPermissions All denied permissions. Both [currentlyDeniedPermissions] and [permanentlyDeniedPermissions].
* @property currentlyDeniedPermissions Currently denied permissions, which can be requested once more.
* @property permanentlyDeniedPermissions Permanently denied permissions, which mustn't be requested again.
* @property allDenied All denied permissions. Both [currentlyDenied] and [permanentlyDenied].
* @property currentlyDenied Currently denied permissions, which can be requested once more.
* @property permanentlyDenied Permanently denied permissions, which mustn't be requested again.
*/
class PermissionsDeniedException(
val deniedPermissions: Array<out String>,
val permanentlyDeniedPermissions: Array<out String>,
val currentlyDeniedPermissions: Array<out String>
val allDenied: Array<out String>,
val permanentlyDenied: Array<out String>,
val currentlyDenied: Array<out String>
) : RuntimeException("Requested permissions have been denied")
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ suspend fun Fragment.requestPermissionsAsync(

class PermissionRequesterFragment : Fragment() {

private var pendingPermissionRequests: MutableMap<Int, PermissionRequest> = HashMap(1)
private var pendingRequests: MutableMap<Int, PermissionRequest> = HashMap(1)
private lateinit var permissionAssurer: PermissionAssurer

private class PermissionRequest(
Expand All @@ -72,8 +72,8 @@ class PermissionRequesterFragment : Fragment() {
.onSuccess { continuation.resume(Unit) }
.recover { exception ->
if (exception is PermissionsDeniedException) {
pendingPermissionRequests[requestCode] = PermissionRequest(exception.deniedPermissions, continuation)
requestPermissions(exception.deniedPermissions, requestCode)
pendingRequests[requestCode] = PermissionRequest(exception.allDenied, continuation)
requestPermissions(exception.allDenied, requestCode)
} else {
continuation.resumeWithException(exception)
}
Expand All @@ -89,7 +89,7 @@ class PermissionRequesterFragment : Fragment() {
@Suppress("ThrowableNotThrown")
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
val permissionRequest = pendingPermissionRequests[requestCode] ?: return
val permissionRequest = pendingRequests[requestCode] ?: return
lifecycleScope.launch {
runCatching { permissionAssurer.ensureGrantedInResults(this, grantResults, permissionRequest.permissions) }
.onSuccess { permissionRequest.continuation.resume(Unit) }
Expand Down
14 changes: 8 additions & 6 deletions library/src/test/kotlin/PermissionAssurerTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ class PermissionAssurerTest {
assert(false) { "Expected exception not thrown" }
} catch (exception: PermissionsDeniedException) {
with(exception) {
assertTrue(permanentlyDeniedPermissions.isEmpty())
assertTrue(deniedPermissions.contentEquals(currentlyDeniedPermissions))
with(deniedPermissions) {
assertTrue(permanentlyDenied.isEmpty())
assertTrue(allDenied.contentEquals(currentlyDenied))
with(allDenied) {
assertTrue(size == 1 && first() == "B")
}
}
Expand All @@ -62,9 +62,11 @@ class PermissionAssurerTest {
verifier.ensureGranted(this, permissionsToRequest)
assert(false) { "Expected exception not thrown" }
} catch (exception: PermissionsDeniedException) {
assertTrue(exception.deniedPermissions.contentEquals(arrayOf("B", "C")))
assertTrue(exception.currentlyDeniedPermissions.contentEquals(arrayOf("B")))
assertTrue(exception.permanentlyDeniedPermissions.contentEquals(arrayOf("C")))
with(exception) {
assertTrue(allDenied.contentEquals(arrayOf("B", "C")))
assertTrue(currentlyDenied.contentEquals(arrayOf("B")))
assertTrue(permanentlyDenied.contentEquals(arrayOf("C")))
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,16 @@ class MainActivity : AppCompatActivity() {
}
}

suspend fun requestPermissions() {
private suspend fun requestPermissions() {
val camera = Manifest.permission.CAMERA
val mic = Manifest.permission.RECORD_AUDIO
try {
requestPermissionsAsync(arrayOf(camera, mic), 12553)
changeText("Permissions granted")
} catch (e: PermissionsDeniedException) {
when {
camera in e.permanentlyDeniedPermissions -> changeText("I really can't work without that one")
camera in e.currentlyDeniedPermissions -> changeText("OK, let me explain")
when (camera) {
in e.permanentlyDenied -> changeText("I really can't work without that one")
in e.currentlyDenied -> changeText("OK, let me explain")
else -> changeText("Be aware your video will have no sound") // (denied mic permission)
}
}
Expand Down

0 comments on commit 51a8806

Please sign in to comment.