提交 358b8341 编写于 作者: J jessyan

Add shouldShowRequestPermissionRationale to PermissionUtil

上级 99172f57
......@@ -78,9 +78,14 @@ public class UserPresenter extends BasePresenter<UserContract.Model, UserContrac
}
@Override
public void onRequestPermissionFailure() {
public void onRequestPermissionFailure(List<String> permissions) {
mRootView.showMessage("Request permissions failure");
}
@Override
public void onRequestPermissionFailureWithAskNeverAgain(List<String> permissions) {
mRootView.showMessage("Need to go to the settings");
}
}, mRootView.getRxPermissions(), mErrorHandler);
......
......@@ -82,8 +82,8 @@ public class ClientModule {
configuration.configRetrofit(application, builder);
builder
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//使用rxjava
.addConverterFactory(GsonConverterFactory.create(gson));//使用Gson
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//使用 Rxjava
.addConverterFactory(GsonConverterFactory.create(gson));//使用 Gson
return builder.build();
}
......
/**
* Copyright 2017 JessYan
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
* Copyright 2017 JessYan
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jess.arms.utils;
import android.Manifest;
import com.tbruyelle.rxpermissions2.Permission;
import com.tbruyelle.rxpermissions2.RxPermissions;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import io.reactivex.annotations.NonNull;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import timber.log.Timber;
......@@ -45,9 +48,24 @@ public class PermissionUtil {
}
public interface RequestPermission {
/**
* 权限请求成功
*/
void onRequestPermissionSuccess();
void onRequestPermissionFailure();
/**
* 用户拒绝了权限请求, 权限请求失败, 但还可以继续请求该权限
*
* @param permissions 请求失败的权限名
*/
void onRequestPermissionFailure(List<String> permissions);
/**
* 用户拒绝了权限请求并且用户选择了以后不再询问, 权限请求失败, 这时将不能继续请求该权限, 需要提示用户进入设置页面打开该权限
*
* @param permissions
*/
void onRequestPermissionFailureWithAskNeverAgain(List<String> permissions);
}
......@@ -65,17 +83,26 @@ public class PermissionUtil {
requestPermission.onRequestPermissionSuccess();
} else {//没有申请过,则开始申请
rxPermissions
.request(needRequest.toArray(new String[needRequest.size()]))
.subscribe(new ErrorHandleSubscriber<Boolean>(errorHandler) {
.requestEach(needRequest.toArray(new String[needRequest.size()]))
.buffer(permissions.length)
.subscribe(new ErrorHandleSubscriber<List<Permission>>(errorHandler) {
@Override
public void onNext(Boolean granted) {
if (granted) {
Timber.tag(TAG).d("Request permissions success");
requestPermission.onRequestPermissionSuccess();
} else {
Timber.tag(TAG).d("Request permissions failure");
requestPermission.onRequestPermissionFailure();
public void onNext(@NonNull List<Permission> permissions) {
for (Permission p : permissions) {
if (!p.granted) {
if (p.shouldShowRequestPermissionRationale) {
Timber.tag(TAG).d("Request permissions failure");
requestPermission.onRequestPermissionFailure(Arrays.asList(p.name));
return;
} else {
Timber.tag(TAG).d("Request permissions failure with ask never again");
requestPermission.onRequestPermissionFailureWithAskNeverAgain(Arrays.asList(p.name));
return;
}
}
}
Timber.tag(TAG).d("Request permissions success");
requestPermission.onRequestPermissionSuccess();
}
});
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册