Skip to content

Commit

Permalink
[bug fixed] request dialog was showing up for granted permissions on …
Browse files Browse the repository at this point in the history
…api 23
  • Loading branch information
FarshadTahmasbi committed Jun 6, 2019
1 parent 9ae451e commit 13277d8
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 17 deletions.
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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()


Expand All @@ -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 ->
Expand All @@ -67,6 +83,5 @@ internal class RuntimePermissionActivity : AppCompatActivity() {
}
}
sendResult(granted, denied, permanentlyDenied)
finish()
}
}

0 comments on commit 13277d8

Please sign in to comment.