package com.team.zhuoke.utils;
import android.Manifest;
import android.app.Activity;
import com.tbruyelle.rxpermissions.RxPermissions;
import com.team.zhuoke.base.BaseActivity;
import com.team.zhuoke.base.BaseFragment;
import com.team.zhuoke.base.BaseView;
import com.team.zhuoke.presenter.home.interfaces.HomeContract;
import com.trello.rxlifecycle.LifecycleTransformer;
/**
* Created by Long
* on 2016/12/8.
*/
public class PermissionUtil {
public interface RequestPermission {
void onRequestPermissionSuccess();
void onRequestPermissionFailed();
}
//
public static <T> LifecycleTransformer<T> bindToLifecycle(BaseView view) {
if (view instanceof BaseActivity) {
return ((BaseActivity) view).<T>bindToLifecycle();
} else if (view instanceof BaseFragment) {
return ((BaseFragment) view).<T>bindToLifecycle();
} else {
throw new IllegalArgumentException("view isn't activity or fragment");
}
}
/**
* 一次性请求所有需要的权限
* @param requestPermission
* @param rxPermissions
* @param view
*/
public static void requestAllPermission(final RequestPermission requestPermission, RxPermissions rxPermissions,BaseView view) {
rxPermissions
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA)
.compose(PermissionUtil.<Boolean>bindToLifecycle(view))
.subscribe(aBoolean -> {
if(aBoolean) {
requestPermission.onRequestPermissionSuccess();
} else {
requestPermission.onRequestPermissionFailed();
}
});
}
/**
* 申请相机权限
* @param requestPermission
* @param rxPermissions
* @param view
*/
public static void requestCameraPermission(final RequestPermission requestPermission, RxPermissions rxPermissions, BaseView view) {
boolean isPermissionsGranted =
rxPermissions
.isGranted(Manifest.permission.CAMERA);
if (isPermissionsGranted) {//已经申请过,直接执行操作
requestPermission.onRequestPermissionSuccess();
} else {//没有申请过,则申请
rxPermissions
.request(Manifest.permission.CAMERA)
.compose(PermissionUtil.<Boolean>bindToLifecycle(view))//使用RXlifecycle,使subscription和activity一起销毁
.subscribe(aBoolean -> {
if(aBoolean) {
requestPermission.onRequestPermissionSuccess();
} else {
requestPermission.onRequestPermissionFailed();
}
});
}
}
/**
* 单独申请外部存储的操作
* @param requestPermission
* @param rxPermissions
* @param view
*/
public static void requestWriteExternalStorage(final RequestPermission requestPermission, RxPermissions rxPermissions, BaseView view) {
boolean isPermissionsGranted =
rxPermissions
.isGranted(Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (isPermissionsGranted) {//已经申请过,直接执行操作
requestPermission.onRequestPermissionSuccess();
} else {//没有申请过,则申请
rxPermissions
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
// .compose(PermissionUtil.<Boolean>bindToLifecycle(view))//使用RXlifecycle,使subscription和activity一起销毁
.subscribe(aBoolean -> {
if(aBoolean) {
requestPermission.onRequestPermissionSuccess();
} else {
requestPermission.onRequestPermissionFailed();
}
});
}
}
}