Permissions utilities

PermissionUtil.java


public class PermissionsUtil {
    public interface IPermissionResult{
        void grantedPermissions(String[] permission);
    }
    public static boolean isPermissionGranted(Context context, String permission){
        return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;
    }
    
    public static void requestPermissions(Context context, int requestCodeOfPermission, String...  permissions) {
        ActivityCompat.requestPermissions((Activity) context, permissions, requestCodeOfPermission);
    }
    public static void onRequestPermissionsResult(
            String[] permissions, int[] grantResults, IPermissionResult iPermissionResult){
        List<String> grantedPermissions = new ArrayList<>();
        if (grantResults != null && grantResults.length > 0) {
            for (int i = 0; i < grantResults.length; i++) {
                if(grantResults[i] == PackageManager.PERMISSION_GRANTED)
                    grantedPermissions.add(permissions[i]);
            }
            iPermissionResult.grantedPermissions(grantedPermissions.toArray(new String[grantedPermissions.size()]));
        }
    }

    public static boolean isPermissionExists(String[] permissions, String permission) {
        return Arrays.asList(permissions).contains(permission);
    }
}

Sample Usage:


@Override
public void onMapReady(GoogleMap googleMap) {
    mGoogleMap = googleMap;
    if(!PermissionsUtil.isPermissionGranted(this, Manifest.permission.ACCESS_FINE_LOCATION)
            || !PermissionsUtil.isPermissionGranted(this, Manifest.permission.ACCESS_COARSE_LOCATION)) {
        PermissionsUtil.requestPermissions(this, REQUEST_CODE_FOR_PERMISSION_LOCATION,
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.ACCESS_COARSE_LOCATION);
    }else {
        setupMap();
    }
}


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull final String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == REQUEST_CODE_FOR_PERMISSION_LOCATION) {
        PermissionsUtil.onRequestPermissionsResult(permissions, grantResults, new PermissionsUtil.IPermissionResult() {
            @Override
            public void grantedPermissions(String[] permission) {
                if (PermissionsUtil.isPermissionExists(permission, Manifest.permission.ACCESS_FINE_LOCATION)
                        || PermissionsUtil.isPermissionExists(permission, Manifest.permission.ACCESS_COARSE_LOCATION)) {
                    setupMap();
                }
            }
        });
    }
}