package me.weyye.hipermission;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.content.ContextCompat;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
import static android.Manifest.permission.CAMERA;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
/**
* Created by Administrator on 2017/5/10 0010.
*/
public class HiPermission {
private final Context mContext;
// private static HiPermission mInstance;
private String mTitle;
private String mMsg;
private int mStyleResId = -1;
private PermissionCallback mCallback;
private List<PermissonItem> mCheckPermissions;
private int mPermissionType;
private String[] mNormalPermissionNames;
private String[] mNormalPermissions = {
WRITE_EXTERNAL_STORAGE, ACCESS_FINE_LOCATION, CAMERA};
private int[] mNormalPermissionIconRes = {
R.drawable.permission_ic_memory, R.drawable.permission_ic_location, R.drawable.permission_ic_camera};
private int mFilterColor = -1;
public static HiPermission create(Context context) {
return new HiPermission(context);
}
public HiPermission(Context context) {
mContext = context;
mNormalPermissionNames = mContext.getResources().getStringArray(R.array.permissionNames);
}
public HiPermission title(String title) {
mTitle = title;
return this;
}
public HiPermission msg(String msg) {
mMsg = msg;
return this;
}
public HiPermission permissions(List<PermissonItem> permissonItems) {
mCheckPermissions = permissonItems;
return this;
}
public HiPermission filterColor(int color) {
mFilterColor = color;
return this;
}
public HiPermission style(int styleResIdsId) {
mStyleResId = styleResIdsId;
return this;
}
private List<PermissonItem> getNormalPermissions() {
List<PermissonItem> permissonItems = new ArrayList<>();
for (int i = 0; i < mNormalPermissionNames.length; i++) {
permissonItems.add(new PermissonItem(mNormalPermissions[i], mNormalPermissionNames[i], mNormalPermissionIconRes[i]));
}
return permissonItems;
}
public static boolean checkPermission(Context context, String permission) {
int checkPermission = ContextCompat.checkSelfPermission(context, permission);
if (checkPermission == PackageManager.PERMISSION_GRANTED) {
return true;
}
return false;
}
/**
* 检查多个权限
*
* @param callback
*/
public void checkMutiPermission(PermissionCallback callback) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
callback.onFinish();
return;
}
if (mCheckPermissions == null) {
mCheckPermissions = new ArrayList<>();
mCheckPermissions.addAll(getNormalPermissions());
}
//检查权限,过滤已允许的权限
Iterator<PermissonItem> iterator = mCheckPermissions.listIterator();
while (iterator.hasNext()) {
if (checkPermission(mContext, iterator.next().Permission))
iterator.remove();
}
mCallback = callback;
if (mCheckPermissions.size() > 0) {
startActivity();
} else {
callback.onFinish();
}
}
/**
* 检查单个权限
*
* @param permission
* @param callback
*/
public void checkSinglePermission(String permission, PermissionCallback callback) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || checkPermission(mContext, permission)) {
callback.onGuarantee(permission, 0);
return;
}
mCallback = callback;
mPermissionType = PermissionActivity.PERMISSION_TYPE_SINGLE;
mCheckPermissions = new ArrayList<>();
mCheckPermissions.add(new PermissonItem(permission));
startActivity();
}
private void startActivity() {
PermissionActivity.setCallBack(mCallback);
Intent intent = new Intent(mContext, PermissionActivity.class);
intent.putExtra(ConstantValue.DATA_TITLE, mTitle);
intent.putExtra(ConstantValue.DATA_PERMISSION_TYPE, mPermissionType);
intent.putExtra(ConstantValue.DATA_MSG, mMsg);
intent.putExtra(ConstantValue.DATA_FILTER_COLOR, mFilterColor);
intent.putExtra(ConstantValue.DATA_STYLE_ID, mStyleResId);
intent.putExtra(ConstantValue.DATA_PERMISSONS, (Serializable) mCheckPermissions);
mContext.startActivity(intent);
}
}