Skip to content

Instantly share code, notes, and snippets.

@vindhyapratap
Created August 30, 2017 10:10
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.view.View;
public class PermissionUtils {
public static final int REQUEST_MEDIA_PIC = 101;
public static final String TAG = "PermissionUtils";
private static final int REQUEST_CONTACTS = 1;
@Nullable
public static PermissionUtils instance = null;
public OnPermissionChanged listener;
private Activity activity;
private View layout;
private PermissionUtils() {
}
@Nullable
public static PermissionUtils getInstance() {
if (null == instance) {
instance = new PermissionUtils();
}
return instance;
}
public static boolean isGranted(@NonNull int[] grantResults) {
// At least one result must be checked.
if (grantResults.length < 1) {
return false;
}
// Verify that each required permission has been granted, otherwise return false.
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
/**
* To check permission granted before requesting it with user.
*
* @param context
* @param permission
* @return
*/
public boolean hasPermission(@NonNull Context context, @NonNull String permission) {
return ActivityCompat.checkSelfPermission(context, permission)
== PackageManager.PERMISSION_GRANTED;
}
public boolean hasAllPermissions(@NonNull Activity activity, @NonNull String[] permissions) {
if (permissions.length < 1) {
return false;
}
for (String result : permissions) {
if (ActivityCompat.checkSelfPermission(activity, result)
!= PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
/**
* To check if Permission granted after requesting it with user.
*
* @param grantResults
* @return
*/
public boolean isPermissionGranted(@NonNull int[] grantResults) {
if (grantResults.length < 1) {
return false;
}
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
/**
* Callback received when a permissions request has been completed.
*/
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (isGranted(grantResults)) {
listener.onGranted(requestCode);
} else {
if (isShowShowPermissionRationale(activity, permissions)) {
//showStoragePermissionRationale();
listener.onRejected(requestCode);
} else {
final GenericDialogFragment.Builder builder = new GenericDialogFragment.Builder(activity);
builder.setCancelOnTouchOutside(true).setCancelable(true)
.setTitle("Permission").setMessage("We require these permissions to take image of your expense. We will redirect you to settings>App>Permission").setPositiveBtnText("OK")
.setPositiveBtnClickListener(new GenericDialogFragment.OnPositiveBtnClickListener() {
@Override
public void onClick(GenericDialogFragment dialog) {
builder.dissmiss();
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", activity.getPackageName(), null);
intent.setData(uri);
activity.startActivity(intent);
}
}).show();
}
}
}
private void requestPermission(@NonNull Activity activity, @NonNull String[] permission, int requestCode) {
ActivityCompat.requestPermissions(activity,
permission,
requestCode);
}
public boolean isShowShowPermissionRationale(@NonNull Activity activity, @NonNull String[] permissions) {
if (permissions.length < 1) {
return false;
}
for (String result : permissions) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity,
result)) {
return true;
}
}
return false;
}
public void showRationale(@NonNull final Activity activity, View layout, String message, @NonNull final String[] permissions, final int requestCode) {
final GenericDialogFragment.Builder builder = new GenericDialogFragment.Builder(activity);
builder.setCancelOnTouchOutside(true).setCancelable(true)
.setTitle("Permission").setMessage("We require these permissions to take image of your expense").setPositiveBtnText("OK")
.setPositiveBtnClickListener(new GenericDialogFragment.OnPositiveBtnClickListener() {
@Override
public void onClick(GenericDialogFragment dialog) {
builder.dissmiss();
ActivityCompat.requestPermissions(activity,
permissions,
requestCode);
}
}).show();
}
public void requestPermission(@NonNull Activity activity, @NonNull String[] permissions, View layout, String message, int requestCode, @NonNull OnPermissionChanged listener) {
this.listener = listener;
this.activity = activity;
this.layout = layout;
if (permissions.length < 1) {
return;
}
if (!hasAllPermissions(activity, permissions)) {
if (isShowShowPermissionRationale(activity, permissions)) {
showRationale(activity, layout, message, permissions, requestCode);
} else {
requestPermission(activity, permissions, requestCode);
}
} else {
listener.hasAllPermission(requestCode);
}
}
public interface OnPermissionChanged {
void onGranted(int requestCode);
void onRejected(int requestCode);
void hasAllPermission(int requestCode);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment