package org.jraf.android.util.app.permission; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.content.pm.PackageManager; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; /** * Utility class dealing with permissions. */ public class PermissionUtil { /** * Determine whether you have been granted a list of permissions. * * @param permissions The names of the permissions being checked. * @return {@code true} if all the permissions are granted, {@code false} if at least one is not granted. */ public static boolean areAllGranted(@NonNull Context context, String... permissions) { for (String permission : permissions) { if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) return false; } return true; } /** * Determine whether a particular permission was granted by the user. * This should be called from within {@link Activity#onRequestPermissionsResult}. * * @param permissions The requested permissions as passed to {@link Activity#onRequestPermissionsResult}. * @param grantResults The grant results for the corresponding permissions as passed to {@link Activity#onRequestPermissionsResult}. * @param permission The permission to test. * @return {@code true} if the permission was granted, {@code false} otherwise. */ public static boolean wasGranted(@NonNull String[] permissions, @NonNull int[] grantResults, @NonNull String permission) { for (int i = 0; i < permissions.length; i++) { if (!permissions[i].equals(permission)) continue; return grantResults[i] == PackageManager.PERMISSION_GRANTED; } // The permission was not even found in the array, treat this as granted return true; } public static void requestMissingPermissions(Activity activity, int requestCode, String... permissions) { ArrayList<String> permissionsToAsk = new ArrayList<>(permissions.length); for (String permission : permissions) { if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) { permissionsToAsk.add(permission); } } if (permissionsToAsk.isEmpty()) return; ActivityCompat.requestPermissions(activity, permissionsToAsk.toArray(new String[permissionsToAsk.size()]), requestCode); } }