|
2 | 2 |
|
3 | 3 | import android.app.Activity; |
4 | 4 |
|
5 | | -import com.tbruyelle.rxpermissions2.Permission; |
6 | 5 | import com.tbruyelle.rxpermissions2.RxPermissions; |
7 | 6 |
|
8 | 7 | import io.reactivex.Observable; |
|
15 | 14 | import io.reactivex.functions.Consumer; |
16 | 15 | import io.reactivex.functions.Function; |
17 | 16 |
|
| 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 | + |
18 | 21 |
|
19 | 22 | class PermissionRequestTransformer<T> implements ObservableTransformer<T, Boolean> { |
20 | 23 |
|
@@ -177,29 +180,44 @@ public void subscribe(@NonNull final ObservableEmitter<Boolean> e) throws Except |
177 | 180 | * @param e Observer |
178 | 181 | * @param permission permission |
179 | 182 | */ |
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) { |
186 | 184 |
|
187 | | - if (permission.granted) { |
188 | 185 |
|
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 { |
192 | 192 |
|
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; |
201 | 220 | } |
202 | | - |
203 | 221 | } |
204 | 222 | }); |
205 | 223 | } |
|
0 commit comments