Skip to content

Commit

Permalink
update to 2.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Ficat committed Jul 8, 2019
1 parent 9e05d34 commit 68c962f
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 76 deletions.
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# EasyPermissions
一个安卓runtime权限库,部分接口名称参考了[RxPermissions](https://github.com/tbruyelle/RxPermissions "go to rxpermissions")<br>
一个及其简洁的安卓runtime权限库<br>
特点如下:
* 链式操作
* 若请求的权限未在manifest中注册,将抛出明确的异常
* 自动重试,配置该选项后若请求被拒但用户未勾选不再提示框时会自动重试直到用户授权或勾选不再提示框
* 自动重试(可配置),配置该选项后若请求被拒但用户未勾选不再提示框时会自动重试直到用户授权或勾选不再提示框

## Gradle依赖

Expand All @@ -21,17 +21,17 @@ allprojects {

```gradle
dependencies {
implementation 'com.github.Ficat:EasyPermissions:v2.0.0'
implementation 'com.github.Ficat:EasyPermissions:v2.1.0'
}
```
## 使用

```java
//requestEach方式
EasyPermissions
.newInstance(activity)
.with(activity)
.requestEach(Manifest.permission.CAMERA)
.subscribe(new RequestEachPublisher.Subscriber() {
.result(new RequestEachExecutor.ResultReceiver() {
@Override
public void onPermissionsRequestResult(Permission permission) {
String name = permission.name;
Expand All @@ -52,9 +52,9 @@ EasyPermissions

//request方式,请求的所有权限被用户授权后返回true,否则返回false
EasyPermissions
.newInstance(activity)
.with(activity)
.request(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE)
.autoRetryWhenUserRefuse(true, new BaseRequestPublisher.RequestAgainListener() {//是否自动重试
.autoRetryWhenUserRefuse(true, new BaseRequestExecutor.RequestAgainListener() {//是否自动重试
@Override
public void requestAgain(String[] needAndCanRequestAgainPermissions) {
//该监听回调中传入的是再次请求的权限,用以在重新请求时弹出说明框等信息(如
Expand All @@ -64,7 +64,7 @@ EasyPermissions
}
}
})
.subscribe(new RequestPublisher.Subscriber() {
.result(new RequestExecutor.ResultReceiver() {
@Override
public void onPermissionsRequestResult(boolean grantAll, List<Permission> results) {
if (grantAll) {
Expand All @@ -73,7 +73,7 @@ EasyPermissions
Toast.makeText(MainActivity.this, "request permissions fail!", Toast.LENGTH_SHORT).show();
}
}
});
});
```

## 致谢
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,17 @@
/**
* Created by ficat on 2018-05-12.
*/
public abstract class BaseRequestPublisher<T extends BaseRequestPublisher.Subscriber> {
public abstract class BaseRequestExecutor<T extends BaseRequestExecutor.ResultReceiver> {
protected String[] mPermissions;
protected PermissionsFragment mPermissionsFragment;
protected List<T> mSubscribers;
protected T mResultReceiver;
protected List<Permission> mResults;
protected RequestAgainListener mRequestAgainListener;
protected boolean mAutoRequestAgain;

BaseRequestPublisher(@NonNull String[] permissions, @NonNull PermissionsFragment fragment) {
BaseRequestExecutor(@NonNull String[] permissions, @NonNull PermissionsFragment fragment) {
this.mPermissions = permissions;
this.mPermissionsFragment = fragment;
this.mSubscribers = new ArrayList<>();
this.mResults = new ArrayList<>();

request();
Expand All @@ -38,13 +37,11 @@ void onRequestPermissionsResult(Permission permission) {
}
}

public void subscribe(T subscriber) {
if (subscriber == null) {
throw new IllegalArgumentException("BaseRequestSubscriber is null");
}
if (!mSubscribers.contains(subscriber)) {
mSubscribers.add(subscriber);
public void result(T resultReceiver) {
if (resultReceiver == null) {
throw new IllegalArgumentException("ResultReceiver is null");
}
mResultReceiver = resultReceiver;
}

/**
Expand Down Expand Up @@ -97,7 +94,7 @@ private void request() {
mPermissionsFragment.requestPermissions(mPermissions, this);
}

public interface Subscriber {
public interface ResultReceiver {

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public static void goToSettingsActivity(Activity activity) {
activity.startActivity(new Intent(Settings.ACTION_SETTINGS));
}

public static EasyPermissions newInstance(@NonNull Activity activity) {
public static EasyPermissions with(@NonNull Activity activity) {
return new EasyPermissions(activity);
}

Expand Down Expand Up @@ -68,14 +68,14 @@ private synchronized PermissionsFragment getPermissionsFragment(Activity activit
return permissionsFragment;
}

public RequestPublisher request(String... permissions) {
public RequestExecutor request(String... permissions) {
checkPermissions(permissions);
return new RequestPublisher(permissions, mPermissionsFragment);
return new RequestExecutor(permissions, mPermissionsFragment);
}

public RequestEachPublisher requestEach(String... permissions) {
public RequestEachExecutor requestEach(String... permissions) {
checkPermissions(permissions);
return new RequestEachPublisher(permissions, mPermissionsFragment);
return new RequestEachExecutor(permissions, mPermissionsFragment);
}

private void checkPermissions(String... permissions) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class PermissionsFragment extends Fragment {

private static final int PERMISSION_REQUEST_CODE = 19;

private Map<String, List<BaseRequestPublisher>> mPermissionsMap = new HashMap<>();
private Map<String, List<BaseRequestExecutor>> mPermissionsMap = new HashMap<>();

@Override
public void onCreate(Bundle savedInstanceState) {
Expand All @@ -49,7 +49,7 @@ static boolean checkSelfPermission(String permission, Context context) {
}

@TargetApi(Build.VERSION_CODES.M)
void requestPermissions(@NonNull String[] permissions, @NonNull BaseRequestPublisher publisher) {
void requestPermissions(@NonNull String[] permissions, @NonNull BaseRequestExecutor publisher) {
List<String> needRequestPermissions = new ArrayList<>();
for (String permission : permissions) {
if (sdkVersionLowerThan23()) {
Expand All @@ -64,7 +64,7 @@ void requestPermissions(@NonNull String[] permissions, @NonNull BaseRequestPubli
publisher.onRequestPermissionsResult(new Permission(permission, false, false));
continue;
}
List<BaseRequestPublisher> list = mPermissionsMap.get(permission);
List<BaseRequestExecutor> list = mPermissionsMap.get(permission);
if (list == null) {
list = new ArrayList<>();
mPermissionsMap.put(permission, list);
Expand Down Expand Up @@ -97,7 +97,7 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String permissi

void onRequestPermissionsResult(String permissions[], int[] grantResults, boolean[] shouldShowRequestPermissionRationale) {
for (int i = 0, size = permissions.length; i < size; i++) {
List<BaseRequestPublisher> list = mPermissionsMap.get(permissions[i]);
List<BaseRequestExecutor> list = mPermissionsMap.get(permissions[i]);
if (list == null) {
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,23 @@
import com.ficat.easypermissions.bean.Permission;


public class RequestEachPublisher extends BaseRequestPublisher<RequestEachPublisher.Subscriber> {
public class RequestEachExecutor extends BaseRequestExecutor<RequestEachExecutor.ResultReceiver> {

RequestEachPublisher(@NonNull String[] permissions, @NonNull PermissionsFragment fragment) {
RequestEachExecutor(@NonNull String[] permissions, @NonNull PermissionsFragment fragment) {
super(permissions, fragment);
}

public RequestEachPublisher autoRetryWhenUserRefuse(boolean autoRequestAgain, RequestAgainListener listener) {
public RequestEachExecutor autoRetryWhenUserRefuse(boolean autoRequestAgain, RequestAgainListener listener) {
mAutoRequestAgain = autoRequestAgain;
mRequestAgainListener = listener;
return this;
}

@Override
public void subscribe(Subscriber subscriber) {
super.subscribe(subscriber);
public void result(ResultReceiver resultReceiver) {
super.result(resultReceiver);
for (Permission p : mResults) {
subscriber.onPermissionsRequestResult(p);
resultReceiver.onPermissionsRequestResult(p);
}
}

Expand All @@ -37,25 +37,20 @@ void onRequestPermissionsResult(Permission permission) {
}
mPermissionsFragment.requestPermissions(permissionArray, this);
} else {
publish(permission);
notifyResult(permission);
}
} else {
publish(permission);
notifyResult(permission);
}
}

/**
* Publish the request results to all of subscribers
*/
private void publish(Permission permission) {
for (Subscriber s : mSubscribers) {
if (s != null) {
s.onPermissionsRequestResult(permission);
}
private void notifyResult(Permission permission) {
if (mResultReceiver != null) {
mResultReceiver.onPermissionsRequestResult(permission);
}
}

public interface Subscriber extends BaseRequestPublisher.Subscriber {
public interface ResultReceiver extends BaseRequestExecutor.ResultReceiver {
void onPermissionsRequestResult(Permission permission);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,26 @@
import java.util.ArrayList;
import java.util.List;

public class RequestPublisher extends BaseRequestPublisher<RequestPublisher.Subscriber> {
public class RequestExecutor extends BaseRequestExecutor<RequestExecutor.ResultReceiver> {

RequestPublisher(@NonNull String[] permissions, @NonNull PermissionsFragment fragment) {
RequestExecutor(@NonNull String[] permissions, @NonNull PermissionsFragment fragment) {
super(permissions, fragment);
}

public RequestPublisher autoRetryWhenUserRefuse(boolean autoRequestAgain, RequestAgainListener listener) {
public RequestExecutor autoRetryWhenUserRefuse(boolean autoRequestAgain, RequestAgainListener listener) {
mAutoRequestAgain = autoRequestAgain;
mRequestAgainListener = listener;
return this;
}

@Override
public void subscribe(Subscriber subscriber) {
super.subscribe(subscriber);
public void result(ResultReceiver resultReceiver) {
super.result(resultReceiver);
if (hasAllResult()) {
publish(isAllGranted());
notifyResult(isAllGranted());
}
}


@Override
void onRequestPermissionsResult(Permission permission) {
super.onRequestPermissionsResult(permission);
Expand All @@ -50,10 +49,10 @@ void onRequestPermissionsResult(Permission permission) {
//只请求用户未勾选不再提示的权限,否则将出现一直请求的情况
mPermissionsFragment.requestPermissions(needRequestArray, this);
} else {
publish(isAllGranted());
notifyResult(isAllGranted());
}
} else {
publish(isAllGranted());
notifyResult(isAllGranted());
}
}

Expand All @@ -74,26 +73,21 @@ private List<Permission> getResults(boolean needAndCanRequestAgain) {
list.add(p);
}
} else {
if ((!p.granted && !p.shouldShowRequestPermissionRationale) || p.granted) {
if (p.granted || !p.shouldShowRequestPermissionRationale) {
list.add(p);
}
}
}
return list;
}

/**
* Publish the request results to all of subscribers
*/
private void publish(boolean grantAll) {
for (Subscriber s : mSubscribers) {
if (s != null) {
s.onPermissionsRequestResult(grantAll, mResults);
}
private void notifyResult(boolean grantAll) {
if (mResultReceiver != null) {
mResultReceiver.onPermissionsRequestResult(grantAll, mResults);
}
}

public interface Subscriber extends BaseRequestPublisher.Subscriber {
public interface ResultReceiver extends BaseRequestExecutor.ResultReceiver {
void onPermissionsRequestResult(boolean grantAll, List<Permission> results);
}

Expand Down
24 changes: 13 additions & 11 deletions sample/src/main/java/com/ficat/sample/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,22 @@
import android.widget.Button;
import android.widget.Toast;

import com.ficat.easypermissions.BaseRequestPublisher;
import com.ficat.easypermissions.BaseRequestExecutor;
import com.ficat.easypermissions.EasyPermissions;
import com.ficat.easypermissions.RequestEachPublisher;
import com.ficat.easypermissions.RequestPublisher;
import com.ficat.easypermissions.RequestEachExecutor;
import com.ficat.easypermissions.RequestExecutor;
import com.ficat.easypermissions.bean.Permission;

import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button btnCamera, btnLocation;
EasyPermissions easyPermissions;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
easyPermissions = EasyPermissions.newInstance(this);
}

private void initView() {
Expand All @@ -39,8 +37,10 @@ private void initView() {
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_camera:
easyPermissions.requestEach(Manifest.permission.CAMERA)
.subscribe(new RequestEachPublisher.Subscriber() {
EasyPermissions
.with(this)
.requestEach(Manifest.permission.CAMERA)
.result(new RequestEachExecutor.ResultReceiver() {
@Override
public void onPermissionsRequestResult(Permission permission) {
if (permission.granted) {
Expand All @@ -52,16 +52,18 @@ public void onPermissionsRequestResult(Permission permission) {
});
break;
case R.id.btn_location:
easyPermissions.request(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE)
.autoRetryWhenUserRefuse(true, new BaseRequestPublisher.RequestAgainListener() {
EasyPermissions
.with(this)
.request(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE)
.autoRetryWhenUserRefuse(true, new BaseRequestExecutor.RequestAgainListener() {
@Override
public void requestAgain(String[] needAndCanRequestAgainPermissions) {
for (String s : needAndCanRequestAgainPermissions) {
Log.e("TAG", "request again permission = "+s);
Log.e("TAG", "request again permission = " + s);
}
}
})
.subscribe(new RequestPublisher.Subscriber() {
.result(new RequestExecutor.ResultReceiver() {
@Override
public void onPermissionsRequestResult(boolean grantAll, List<Permission> results) {
if (grantAll) {
Expand Down

0 comments on commit 68c962f

Please sign in to comment.