aboutsummaryrefslogtreecommitdiff
path: root/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/PermissionUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/PermissionUtils.java')
-rw-r--r--libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/PermissionUtils.java97
1 files changed, 97 insertions, 0 deletions
diff --git a/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/PermissionUtils.java b/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/PermissionUtils.java
new file mode 100644
index 000000000..bf30103d2
--- /dev/null
+++ b/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/PermissionUtils.java
@@ -0,0 +1,97 @@
+package org.wordpress.android.util;
+
+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;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PermissionUtils {
+ /**
+ * 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(Activity activity, int requestCode, String[] permissionList) {
+ List<String> toRequest = new ArrayList<>();
+ for (String permission : permissionList) {
+ if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
+ toRequest.add(permission);
+ }
+ }
+ if (toRequest.size() > 0) {
+ String[] requestedPermissions = toRequest.toArray(new String[toRequest.size()]);
+ ActivityCompat.requestPermissions(activity, requestedPermissions, requestCode);
+ return false;
+ }
+ 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<String> 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,
+ permission.CAMERA
+ });
+ }
+
+ 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
+ });
+ }
+}