diff --git a/WordPressUtils/src/main/java/org/wordpress/android/util/PermissionUtils.java b/WordPressUtils/src/main/java/org/wordpress/android/util/PermissionUtils.java index 24c4fbdd7360..bf30103d2265 100644 --- a/WordPressUtils/src/main/java/org/wordpress/android/util/PermissionUtils.java +++ b/WordPressUtils/src/main/java/org/wordpress/android/util/PermissionUtils.java @@ -2,7 +2,10 @@ import android.Manifest.permission; import android.app.Activity; +import android.app.Fragment; +import android.content.Context; import android.content.pm.PackageManager; +import android.support.v13.app.FragmentCompat; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; @@ -30,6 +33,28 @@ private static boolean checkAndRequestPermissions(Activity activity, int request return true; } + /** + * Check for permissions, request them if they're not granted. + * + * @return true if permissions are already granted, else request them and return false. + */ + private static boolean checkAndRequestPermissions(Fragment fragment, int requestCode, String[] permissionList) { + List toRequest = new ArrayList<>(); + for (String permission : permissionList) { + Context context = fragment.getActivity(); + if (context != null && ContextCompat.checkSelfPermission(context, permission) != PackageManager + .PERMISSION_GRANTED) { + toRequest.add(permission); + } + } + if (toRequest.size() > 0) { + String[] requestedPermissions = toRequest.toArray(new String[toRequest.size()]); + FragmentCompat.requestPermissions(fragment, requestedPermissions, requestCode); + return false; + } + return true; + } + public static boolean checkAndRequestCameraAndStoragePermissions(Activity activity, int requestCode) { return checkAndRequestPermissions(activity, requestCode, new String[]{ permission.WRITE_EXTERNAL_STORAGE, @@ -37,16 +62,36 @@ public static boolean checkAndRequestCameraAndStoragePermissions(Activity activi }); } + public static boolean checkAndRequestCameraAndStoragePermissions(Fragment fragment, int requestCode) { + return checkAndRequestPermissions(fragment, requestCode, new String[]{ + permission.WRITE_EXTERNAL_STORAGE, + permission.CAMERA + }); + } + public static boolean checkAndRequestStoragePermission(Activity activity, int requestCode) { return checkAndRequestPermissions(activity, requestCode, new String[]{ permission.WRITE_EXTERNAL_STORAGE }); } + public static boolean checkAndRequestStoragePermission(Fragment fragment, int requestCode) { + return checkAndRequestPermissions(fragment, requestCode, new String[]{ + permission.WRITE_EXTERNAL_STORAGE + }); + } + public static boolean checkLocationPermissions(Activity activity, int requestCode) { return checkAndRequestPermissions(activity, requestCode, new String[]{ permission.ACCESS_FINE_LOCATION, permission.ACCESS_COARSE_LOCATION }); } + + public static boolean checkLocationPermissions(Fragment fragment, int requestCode) { + return checkAndRequestPermissions(fragment, requestCode, new String[]{ + permission.ACCESS_FINE_LOCATION, + permission.ACCESS_COARSE_LOCATION + }); + } }