diff options
Diffstat (limited to 'core/src/main/kotlin/ca/allanwang/kau/permissions/PermissionManager.kt')
-rw-r--r-- | core/src/main/kotlin/ca/allanwang/kau/permissions/PermissionManager.kt | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/core/src/main/kotlin/ca/allanwang/kau/permissions/PermissionManager.kt b/core/src/main/kotlin/ca/allanwang/kau/permissions/PermissionManager.kt index 8b639ad..3b15e0b 100644 --- a/core/src/main/kotlin/ca/allanwang/kau/permissions/PermissionManager.kt +++ b/core/src/main/kotlin/ca/allanwang/kau/permissions/PermissionManager.kt @@ -15,6 +15,9 @@ import java.lang.ref.WeakReference /** * Created by Allan Wang on 2017-07-03. + * + * Permission manager that is decoupled from activities + * Keeps track of pending requests, and warns about invalid requests */ internal object PermissionManager { @@ -24,7 +27,7 @@ internal object PermissionManager { /** * Retrieve permissions requested in our manifest */ - val manifestPermission = lazyContext<Array<String>> { + private val manifestPermission = lazyContext<Array<String>> { try { it.packageManager.getPackageInfo(it.packageName, PackageManager.GET_PERMISSIONS)?.requestedPermissions ?: emptyArray() } catch (e: Exception) { @@ -44,7 +47,7 @@ internal object PermissionManager { } else KL.d { "Request is postponed since another one is still in progress; did you remember to override onRequestPermissionsResult?" } } - @Synchronized internal fun requestPermissions(context: Context, permissions: Array<out String>) { + @Synchronized private fun requestPermissions(context: Context, permissions: Array<out String>) { permissions.forEach { if (!manifestPermission(context).contains(it)) { KL.e { "Requested permission $it is not stated in the manifest" } @@ -57,6 +60,10 @@ internal object PermissionManager { ActivityCompat.requestPermissions(activity, permissions, 1) } + /** + * Handles permission result by allowing accepted permissions for all pending requests + * Also cleans up destroyed or completed pending requests + */ fun onRequestPermissionsResult(context: Context, permissions: Array<out String>, grantResults: IntArray) { KL.i { "On permission result: pending ${pendingResults.size}" } val count = Math.min(permissions.size, grantResults.size) |