Created
August 30, 2017 10:10
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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