package com.obsez.android.lib.filechooser.permissions; import android.content.Context; import android.content.Intent; import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.SparseArray; import java.util.Random; public final class PermissionsUtil { @SuppressWarnings("unused") public static final String TAG = PermissionsUtil.class.getName(); public interface OnPermissionListener { void onPermissionGranted(final String[] permissions); void onPermissionDenied(final String[] permissions); void onShouldShowRequestPermissionRationale(final String[] permissions); } public static void checkPermissions(@NonNull Context context, @Nullable final OnPermissionListener onPermissionListener, final String... permissions) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || permissions.length == 0) { if (onPermissionListener != null) onPermissionListener.onPermissionGranted(permissions); return; } int requestCode = _random.nextInt(1024); _permissionListeners.put(requestCode, onPermissionListener); Intent intent = new Intent(context, PermissionActivity.class); intent.putExtra(PermissionActivity.INTENT_EXTRA_PERMISSIONS, permissions); intent.putExtra(PermissionActivity.INTENT_EXTRA_REQUEST_CODE, requestCode); context.startActivity(intent); } private static final SparseArray _permissionListeners = new SparseArray<>(); private static final Random _random = new Random(); static OnPermissionListener getPermissionListener(final int requestCode) { OnPermissionListener listener = _permissionListeners.get(requestCode, null); _permissionListeners.remove(requestCode); return listener; } }