Skip to content

Instantly share code, notes, and snippets.

@shishirthedev
Created January 23, 2019 18:39
Show Gist options
  • Select an option

  • Save shishirthedev/965db9cb1644db71d51dc5bfb2b46251 to your computer and use it in GitHub Desktop.

Select an option

Save shishirthedev/965db9cb1644db71d51dc5bfb2b46251 to your computer and use it in GitHub Desktop.
public class PermissionManager {
private Context context;
private SessionManager sessionManager;
public PermissionManager(Context context){
this.context = context;
sessionManager = new SessionManager(context);
}
public boolean shouldAskPermission() {
return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M);
}
private boolean shouldAskPermission(Context context, String permission){
if (shouldAskPermission()) {
int permissionResult = ActivityCompat.checkSelfPermission(context, permission);
if (permissionResult != PackageManager.PERMISSION_GRANTED) {
return true;
}
}
return false;
}
public void checkPermission(Context context, String permission, PermissionAskListener listener){
if (shouldAskPermission(context, permission)){
if (ActivityCompat.shouldShowRequestPermissionRationale((AppCompatActivity)context,permission)) {
listener.onPermissionPreviouslyDenied();
} else {
if (sessionManager.isFirstTimeAsking(permission)) {
sessionManager.firstTimeAsking(permission, false);
listener.onNeedPermission();
} else {
listener.onPermissionPreviouslyDeniedWithNeverAskAgain();
}
}
} else {
listener.onPermissionGranted();
}
}
public interface PermissionAskListener {
void onNeedPermission();
void onPermissionPreviouslyDenied();
void onPermissionPreviouslyDeniedWithNeverAskAgain();
void onPermissionGranted();
}
}
//
public class SessionManager {
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
private final String MY_PREF = "my_preferences";
public SessionManager(Context context) {
sharedPreferences = context.getSharedPreferences(MY_PREF, MODE_PRIVATE);
}
public void firstTimeAsking(String permission, boolean isFirstTime) {
doEdit();
editor.putBoolean(permission, isFirstTime);
doCommit();
}
public boolean isFirstTimeAsking(String permission) {
return sharedPreferences.getBoolean(permission, true);
}
private void doEdit() {
if (editor == null) {
editor = sharedPreferences.edit();
}
}
private void doCommit() {
if (editor != null) {
editor.commit();
editor = null;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment