Created
February 28, 2018 08:49
-
-
Save Callonski/6af23e33b8c740c7ba0d061764391c9e to your computer and use it in GitHub Desktop.
Pepes Permission klass
This file contains hidden or 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.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