Skip to content

Instantly share code, notes, and snippets.

@Bramengton
Created February 19, 2018 18:15
Show Gist options
  • Save Bramengton/81c7c0640a44d13d179f76a95b21f888 to your computer and use it in GitHub Desktop.
Save Bramengton/81c7c0640a44d13d179f76a95b21f888 to your computer and use it in GitHub Desktop.
Request permission
package com.mphone.callerplus;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import com.mphone.callerplus.utils.UIUtil;
/**
* @author by Bramengton on 03.07.16.
*/
public final class PermissionApplication {
private static final int MIN_API = 23; //Android M
private static final int PERMISSION_REQUEST_CODE = 100;
private boolean mIsPermissionGranted = false;
private Fragment mFragment;
private String[] mPermission;
//private MIUIHelper mMIUIHelper;
private OnFragmentPermissionListener mListener;
public interface OnFragmentPermissionListener{
void onPermissionGranted();
void onPermissionDenied(String[] permissions);
}
public PermissionApplication(String[] permission){
mPermission = permission;
//mMIUIHelper = MIUIHelper.getInstance();
}
public boolean IsPermissionGranted(){
return mIsPermissionGranted;
}
public void getCheckPermission(Fragment fragment, OnFragmentPermissionListener listener) {
mListener = listener;
mFragment = fragment;
if(mIsPermissionGranted) return;
if (isPermissionsEnabled(mFragment.getContext(), mPermission) && listener != null) {
mIsPermissionGranted = true;
mListener.onPermissionGranted();
}else getRequestPermission(mFragment, mPermission);
}
public boolean isPermissionsEnabled(Context context, String[] permissions) {
if (Build.VERSION.SDK_INT < MIN_API) return mIsPermissionGranted=true;
int grant = 0;
for (String permission: permissions)
if(ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED)
grant++;
return grant == permissions.length;
}
private void getApplicationRequestPermission(Fragment fragment, String[] permissions) {
fragment.requestPermissions(permissions, PERMISSION_REQUEST_CODE);
}
public void getApplicationRequestPermission(String[] permissions) {
if(mIsPermissionGranted) return;
getApplicationRequestPermission(mFragment, permissions);
}
private void getRequestPermission(Fragment fragment,String[] permissions) {
/*
int should = 0;
for (String permission: permissions)
if(!fragment.shouldShowRequestPermissionRationale(permission))
should++;
if(should == permissions.length){}
*/
getApplicationRequestPermission(fragment, permissions);
}
public void getRequestPermissionsResult(int requestCode, @NonNull final String[] permissions, @NonNull int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_CODE && grantResults.length > 0 && mListener!=null) {
String[] mPermissionsDenied = new String[0];
for (int i=0; i<permissions.length; i++) {
if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
mPermissionsDenied = UIUtil.addElement(mPermissionsDenied, permissions[i]);
}
}
if(mPermissionsDenied.length==0){
mIsPermissionGranted = true;
mListener.onPermissionGranted();
}else {
mListener.onPermissionDenied(mPermissionsDenied);
}
}
}
// private String[] addElement(String[] org, String added) {
// String[] result = Arrays.copyOf(org, org.length+1);
// result[org.length] = added;
// return result;
// }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment