package com.felkertech.cumulustv.utils; import android.app.Activity; import android.content.DialogInterface; import android.content.pm.PackageManager; import android.os.Build; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.util.Log; import com.felkertech.n.cumulustv.R; /** * Created by N on 7/1/2015. * Meant for Android Marshmallow and beyond */ public class PermissionUtils { private static String TAG = PermissionUtils.class.getSimpleName(); private static final boolean DEBUG = false; private final static int MY_PERMISSIONS_RETURN = 1; public static boolean isEnabled(Activity activity, String permission) { return activity.checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED; } public static boolean isDisabled(Activity mActivity, String permission) { return !isEnabled(mActivity, permission); } public static void requestPermissionIfDisabled(AppCompatActivity activity, String permission) { requestPermissionIfDisabled(activity, permission, ""); } public static void requestPermissionIfDisabled(Activity activity, String permission) { requestPermissionIfDisabled(activity, permission, ""); } public static void requestPermissionIfDisabled(final AppCompatActivity activity, final String permission, String rationale) { if (DEBUG) { Log.d(TAG, Build.VERSION.CODENAME); Log.d(TAG, "Is " + permission + " enabled? " + isEnabled(activity, permission)); } if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (isDisabled(activity, permission)) { if (DEBUG) { Log.d(TAG, "Show rationale? " + activity.shouldShowRequestPermissionRationale(permission) + " " + rationale); } if (activity.shouldShowRequestPermissionRationale(permission) && !rationale.isEmpty()) { new AlertDialog.Builder(activity) .setTitle(R.string.request_permission) .setMessage(rationale) .setPositiveButton(R.string.ok, null) .setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialogInterface) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { activity.requestPermissions(new String[]{permission}, MY_PERMISSIONS_RETURN); } } }) .show(); } else { if (DEBUG) { Log.d(TAG, "Make a request"); } activity.requestPermissions(new String[]{permission}, MY_PERMISSIONS_RETURN); } } } } public static void requestPermissionIfDisabled(final Activity mActivity, final String permission, String rationale) { if (DEBUG) { Log.d(TAG, Build.VERSION.CODENAME); Log.d(TAG, "Is " + permission + " enabled? " + isEnabled(mActivity, permission)); } if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if(isDisabled(mActivity, permission)) { if (DEBUG) { Log.d(TAG, "Show rationale? " + mActivity.shouldShowRequestPermissionRationale(permission) + " " + rationale); } if(mActivity.shouldShowRequestPermissionRationale(permission) && !rationale.isEmpty()) { new AlertDialog.Builder(mActivity) .setTitle(R.string.request_permission) .setMessage(rationale) .setPositiveButton(R.string.ok, null) .setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialogInterface) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { mActivity.requestPermissions(new String[]{permission}, MY_PERMISSIONS_RETURN); } } }) .show(); } else { if (DEBUG) { Log.d(TAG, "Make a request"); } mActivity.requestPermissions(new String[]{permission}, MY_PERMISSIONS_RETURN); } } } } }