diff --git a/library/src/main/kotlin/com/gabrielfeo/suspend/permission/assurer/PermissionsDeniedException.kt b/library/src/main/kotlin/com/gabrielfeo/suspend/permission/assurer/PermissionsDeniedException.kt index aeedb1b..f98a1ac 100644 --- a/library/src/main/kotlin/com/gabrielfeo/suspend/permission/assurer/PermissionsDeniedException.kt +++ b/library/src/main/kotlin/com/gabrielfeo/suspend/permission/assurer/PermissionsDeniedException.kt @@ -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, - val permanentlyDeniedPermissions: Array, - val currentlyDeniedPermissions: Array + val allDenied: Array, + val permanentlyDenied: Array, + val currentlyDenied: Array ) : RuntimeException("Requested permissions have been denied") \ No newline at end of file diff --git a/library/src/main/kotlin/com/gabrielfeo/suspend/permission/requester/PermissionRequesterFragment.kt b/library/src/main/kotlin/com/gabrielfeo/suspend/permission/requester/PermissionRequesterFragment.kt index 369bfe3..f722fea 100644 --- a/library/src/main/kotlin/com/gabrielfeo/suspend/permission/requester/PermissionRequesterFragment.kt +++ b/library/src/main/kotlin/com/gabrielfeo/suspend/permission/requester/PermissionRequesterFragment.kt @@ -50,7 +50,7 @@ suspend fun Fragment.requestPermissionsAsync( class PermissionRequesterFragment : Fragment() { - private var pendingPermissionRequests: MutableMap = HashMap(1) + private var pendingRequests: MutableMap = HashMap(1) private lateinit var permissionAssurer: PermissionAssurer private class PermissionRequest( @@ -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) } @@ -89,7 +89,7 @@ class PermissionRequesterFragment : Fragment() { @Suppress("ThrowableNotThrown") override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, 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) } diff --git a/library/src/test/kotlin/PermissionAssurerTest.kt b/library/src/test/kotlin/PermissionAssurerTest.kt index 249d219..2f64f0a 100644 --- a/library/src/test/kotlin/PermissionAssurerTest.kt +++ b/library/src/test/kotlin/PermissionAssurerTest.kt @@ -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") } } @@ -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"))) + } } } diff --git a/sample/src/main/java/com/gabrielfeo/suspend/permission/sample/MainActivity.kt b/sample/src/main/java/com/gabrielfeo/suspend/permission/sample/MainActivity.kt index 22c9aef..29f7a26 100644 --- a/sample/src/main/java/com/gabrielfeo/suspend/permission/sample/MainActivity.kt +++ b/sample/src/main/java/com/gabrielfeo/suspend/permission/sample/MainActivity.kt @@ -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) } }