diff --git a/.idea/misc.xml b/.idea/misc.xml index 37a7509..7bfef59 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> - <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/build/classes" /> </component> <component name="ProjectType"> diff --git a/easypermission/src/main/java/com/androidisland/easypermission/EasyPermission.kt b/easypermission/src/main/java/com/androidisland/easypermission/EasyPermission.kt index 0a302c7..7422f61 100644 --- a/easypermission/src/main/java/com/androidisland/easypermission/EasyPermission.kt +++ b/easypermission/src/main/java/com/androidisland/easypermission/EasyPermission.kt @@ -81,9 +81,9 @@ class EasyPermission { fun request( listener: ( - granted: List<String>, - denied: List<String>, - permanentlyDenied: List<String> + granted: Set<String>, + denied: Set<String>, + permanentlyDenied: Set<String> ) -> Unit ) { val intent = Intent(context, RuntimePermissionActivity::class.java) diff --git a/easypermission/src/main/java/com/androidisland/easypermission/PermissionResult.kt b/easypermission/src/main/java/com/androidisland/easypermission/PermissionResult.kt index 49574e3..bc57f22 100644 --- a/easypermission/src/main/java/com/androidisland/easypermission/PermissionResult.kt +++ b/easypermission/src/main/java/com/androidisland/easypermission/PermissionResult.kt @@ -5,7 +5,7 @@ import android.os.Handler import android.os.Looper import android.os.ResultReceiver -internal class PermissionResult(private val listener: (List<String>, List<String>, List<String>) -> Unit) : +internal class PermissionResult(private val listener: (Set<String>, Set<String>, Set<String>) -> Unit) : ResultReceiver(Handler(Looper.getMainLooper())) { companion object { @@ -27,6 +27,6 @@ internal class PermissionResult(private val listener: (List<String>, List<String denied = getStringArrayList(EXTRA_DENIED_PERMISSIONS) ?: ArrayList() permanentlyDenied = getStringArrayList(EXTRA_PERMANENTLY_DENIED_PERMISSIONS) ?: ArrayList() } - listener.invoke(granted, denied, permanentlyDenied) + listener.invoke(granted.toSet(), denied.toSet(), permanentlyDenied.toSet()) } } \ No newline at end of file diff --git a/easypermission/src/main/java/com/androidisland/easypermission/RuntimePermissionActivity.kt b/easypermission/src/main/java/com/androidisland/easypermission/RuntimePermissionActivity.kt index 6d27ef4..27b035c 100644 --- a/easypermission/src/main/java/com/androidisland/easypermission/RuntimePermissionActivity.kt +++ b/easypermission/src/main/java/com/androidisland/easypermission/RuntimePermissionActivity.kt @@ -11,11 +11,16 @@ internal class RuntimePermissionActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - ActivityCompat.requestPermissions( - this, - getRequestedPermissions(), - PermissionResult.CODE_PERMISSION - ) + val notGranted = getNotGrantedPermissions() + if (notGranted.isNotEmpty()) { + ActivityCompat.requestPermissions( + this, + getNotGrantedPermissions(), + PermissionResult.CODE_PERMISSION + ) + } else { + sendResult(ArrayList(getGrantedPermissions().toList()), ArrayList(), ArrayList()) + } } private fun sendResult( @@ -33,16 +38,26 @@ internal class RuntimePermissionActivity : AppCompatActivity() { PermissionResult.EXTRA_PERMANENTLY_DENIED_PERMISSIONS to permanentlyDenied ) ) + finish() } private fun getRequestedPermissions() = intent.getStringArrayExtra(PermissionResult.EXTRA_REQUESTED_PERMISSIONS) - private fun getNotGrantedRequests() = - getRequestedPermissions().filter { !EasyPermission.isGranted( - this, - it - ) + private fun getGrantedPermissions() = + getRequestedPermissions().filter { + EasyPermission.isGranted( + this, + it + ) + }.toTypedArray() + + private fun getNotGrantedPermissions() = + getRequestedPermissions().filter { + !EasyPermission.isGranted( + this, + it + ) }.toTypedArray() @@ -53,6 +68,7 @@ internal class RuntimePermissionActivity : AppCompatActivity() { ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) val granted = ArrayList<String>() + granted.addAll(getGrantedPermissions()) val denied = ArrayList<String>() val permanentlyDenied = ArrayList<String>() permissions.forEachIndexed { index, permission -> @@ -67,6 +83,5 @@ internal class RuntimePermissionActivity : AppCompatActivity() { } } sendResult(granted, denied, permanentlyDenied) - finish() } } \ No newline at end of file