Skip to content

Instantly share code, notes, and snippets.

@Callonski
Created February 28, 2018 08:49
Show Gist options
  • Save Callonski/6af23e33b8c740c7ba0d061764391c9e to your computer and use it in GitHub Desktop.
Save Callonski/6af23e33b8c740c7ba0d061764391c9e to your computer and use it in GitHub Desktop.
Pepes Permission klass
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.content.ContextCompat;
import android.util.Log;
// Pepes permission class
public class Permissions extends Fragment {
public static final String[] PERMISSIONS = {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
};
private static final String TAG = "PermissionsFragment";
private Callback mCallback;
private String[] mPermissions;
private int mRequestPermissions;
public static Permissions start(FragmentManager manager, final int requestPermissions, String... permissions) {
Permissions headlessFrag = (Permissions) manager
.findFragmentByTag(TAG);
headlessFrag = new Permissions();
Bundle bundle = new Bundle();
bundle.putStringArray("permissions", permissions);
bundle.putInt("RequestPermissions", requestPermissions);
headlessFrag.setArguments(bundle);
manager.beginTransaction()
.add(headlessFrag, TAG)
.commit();
return headlessFrag;
}
@Override
public void onAttach(final Context context) {
super.onAttach(context);
if (context instanceof Callback) {
mCallback = (Callback) context;
Log.d(TAG, "onAttach: " + mCallback);
} else if (getParentFragment() instanceof Callback) {
mCallback = (Callback)getParentFragment();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
mPermissions = getArguments().getStringArray("permissions");
mRequestPermissions = getArguments().getInt("RequestPermissions");
checkPermissions(mPermissions);
}
@Override
public void onDetach() {
super.onDetach();
mCallback = null;
}
public void checkPermissions(final String[] permissions) {
mPermissions = permissions;
if (!hasPermissions(permissions)) {
if (shouldShowRequestPermissionRationale(permissions)) {
mCallback.showExplanationDialog();
} else {
requestPermissions();
}
} else {
mCallback.onPermissionGranted();
}
}
public void requestPermissions() {
requestPermissions(mPermissions, mRequestPermissions);
}
public boolean hasPermissions(String... permissions) {
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(getContext(), permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
public boolean shouldShowRequestPermissionRationale(String... permissions) {
for (String permission : permissions) {
if (shouldShowRequestPermissionRationale(permission)) {
return true;
}
}
return false;
}
@Override
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
if (mRequestPermissions == requestCode) {
if (checkPermissionsResult(grantResults)) {
mCallback.onPermissionGranted();
} else {
mCallback.onPermissionDenied();
}
}
}
private boolean checkPermissionsResult(int[] grantResults) {
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
public interface Callback {
void onPermissionGranted();
void showExplanationDialog();
void onPermissionDenied();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment