Skip to content

Commit 23fb763

Browse files
committed
bugfix request-mulit-permission-error
1 parent 0b81762 commit 23fb763

File tree

2 files changed

+39
-21
lines changed

2 files changed

+39
-21
lines changed

rx_easy_runtime_permission/src/main/java/cn/f_ms/rx_easy_runtime_permission/PermissionException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class PermissionException extends RuntimeException {
88
private TYPE mExceptionType;
99

1010
public enum TYPE {
11-
USER_REFUSE, USER_REFUSE_TIPS, REFUSE_NEVER_ASK
11+
USER_REFUSE, USER_REFUSE_TIPS, REFUSE_NEVER_ASK, PASS
1212
}
1313

1414
public PermissionException(TYPE exceptionType) {

rx_easy_runtime_permission/src/main/java/cn/f_ms/rx_easy_runtime_permission/PermissionRequestTransformer.java

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import android.app.Activity;
44

5-
import com.tbruyelle.rxpermissions2.Permission;
65
import com.tbruyelle.rxpermissions2.RxPermissions;
76

87
import io.reactivex.Observable;
@@ -15,6 +14,10 @@
1514
import io.reactivex.functions.Consumer;
1615
import io.reactivex.functions.Function;
1716

17+
import static cn.f_ms.rx_easy_runtime_permission.PermissionException.TYPE.PASS;
18+
import static cn.f_ms.rx_easy_runtime_permission.PermissionException.TYPE.REFUSE_NEVER_ASK;
19+
import static cn.f_ms.rx_easy_runtime_permission.PermissionException.TYPE.USER_REFUSE;
20+
1821

1922
class PermissionRequestTransformer<T> implements ObservableTransformer<T, Boolean> {
2023

@@ -177,29 +180,44 @@ public void subscribe(@NonNull final ObservableEmitter<Boolean> e) throws Except
177180
* @param e Observer
178181
* @param permission permission
179182
*/
180-
private void requestPermission(@NonNull final ObservableEmitter<Boolean> e, String... permission) {
181-
rxPermissions.requestEach(permission)
182-
.subscribe(new Consumer<Permission>() {
183-
184-
@Override
185-
public void accept(@NonNull Permission permission) throws Exception {
183+
private void requestPermission(@NonNull final ObservableEmitter<Boolean> e, final String... permission) {
186184

187-
if (permission.granted) {
188185

189-
e.onNext(true);
190-
e.onComplete();
191-
} else if (permission.shouldShowRequestPermissionRationale) {
186+
rxPermissions.request(permission)
187+
.zipWith(
188+
rxPermissions.shouldShowRequestPermissionRationale(mActivity, permission),
189+
new BiFunction<Boolean, Boolean, PermissionException.TYPE>() {
190+
@Override
191+
public PermissionException.TYPE apply(@NonNull Boolean requestResult, @NonNull Boolean shouldResult) throws Exception {
192192

193-
e.onError(
194-
new PermissionException(PermissionException.TYPE.USER_REFUSE)
195-
);
196-
} else {
197-
198-
e.onError(
199-
new PermissionException(PermissionException.TYPE.REFUSE_NEVER_ASK)
200-
);
193+
if (requestResult) {
194+
return PASS;
195+
} else if (shouldResult) {
196+
return USER_REFUSE;
197+
} else {
198+
return REFUSE_NEVER_ASK;
199+
}
200+
}
201+
}
202+
)
203+
.subscribe(new Consumer<PermissionException.TYPE>() {
204+
@Override
205+
public void accept(@NonNull PermissionException.TYPE type) throws Exception {
206+
switch (type) {
207+
case REFUSE_NEVER_ASK:
208+
e.onError(
209+
new PermissionException(PermissionException.TYPE.REFUSE_NEVER_ASK)
210+
);
211+
break;
212+
case USER_REFUSE:
213+
e.onError(
214+
new PermissionException(PermissionException.TYPE.USER_REFUSE)
215+
);
216+
break;
217+
case PASS:
218+
e.onNext(true);
219+
break;
201220
}
202-
203221
}
204222
});
205223
}

0 commit comments

Comments
 (0)