diff --git a/README.md b/README.md index 4d17934..44f67b0 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Nexus 10 (L) #### Gradle ```groovy - compile 'com.github.k0shk0sh:PermissionHelper:1.0.12' + compile 'com.github.k0shk0sh:PermissionHelper:1.0.13' ``` #### Maven diff --git a/gradle.properties b/gradle.properties index 6f0d9aa..635cc43 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ -VERSION_NAME=1.0.12 -VERSION_CODE=12 +VERSION_NAME=1.0.13 +VERSION_CODE=13 GROUP=com.github.k0shk0sh POM_DESCRIPTION=A Library that simplify Android Runtime Permissions POM_URL=https://github.com/k0shk0sh/PermissionHelper diff --git a/permission/build.gradle b/permission/build.gradle index 570b97a..cc29276 100644 --- a/permission/build.gradle +++ b/permission/build.gradle @@ -8,8 +8,8 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 24 - versionCode 12 - versionName "1.0.12" + versionCode 13 + versionName "1.0.13" } buildTypes { release { diff --git a/permission/src/main/java/com/fastaccess/permission/base/PermissionHelper.java b/permission/src/main/java/com/fastaccess/permission/base/PermissionHelper.java index e38b2cf..84ed1c3 100644 --- a/permission/src/main/java/com/fastaccess/permission/base/PermissionHelper.java +++ b/permission/src/main/java/com/fastaccess/permission/base/PermissionHelper.java @@ -164,17 +164,18 @@ private void handleSingle(@NonNull String permissionName) { /** * internal usage. */ - private void handleMulti(@NonNull String[] permissionsName) { - String[] permissions = declinedPermissions(context, permissionsName); - if (permissions.length == 0) { - permissionCallback.onPermissionGranted(permissionsName); + private void handleMulti(@NonNull String[] permissionNames) { + List permissions = declinedPermissionsAsList(context, permissionNames); + if (permissions.isEmpty()) { + permissionCallback.onPermissionGranted(permissionNames); return; } - for (String permission : permissions) { - if (permission != null) { - handleSingle(permission); - } + boolean hasAlertWindowPermission = permissions.contains(Manifest.permission.SYSTEM_ALERT_WINDOW); + if (hasAlertWindowPermission) { + int index = permissions.indexOf(Manifest.permission.SYSTEM_ALERT_WINDOW); + permissions.remove(index); } + ActivityCompat.requestPermissions(context, permissions.toArray(new String[permissions.size()]), REQUEST_PERMISSIONS); } /** @@ -310,13 +311,23 @@ public void openSettingsScreen() { public static String[] declinedPermissions(@NonNull Context context, @NonNull String[] permissions) { List permissionsNeeded = new ArrayList<>(); for (String permission : permissions) { - if (isPermissionDeclined(context, permission)) { + if (isPermissionDeclined(context, permission) && permissionExists(context, permission)) { permissionsNeeded.add(permission); } } return permissionsNeeded.toArray(new String[permissionsNeeded.size()]); } + public static List declinedPermissionsAsList(@NonNull Context context, @NonNull String[] permissions) { + List permissionsNeeded = new ArrayList<>(); + for (String permission : permissions) { + if (isPermissionDeclined(context, permission) && permissionExists(context, permission)) { + permissionsNeeded.add(permission); + } + } + return permissionsNeeded; + } + /** * return true if permission is granted, false otherwise. *

@@ -406,5 +417,4 @@ public static void removeGrantedPermissions(@NonNull Context context, @NonNull L models.removeAll(granted); } } - }