feat:调整客服中心权限拒绝提示判断;增加私聊图片权限检测与提示;

This commit is contained in:
Max
2024-01-04 15:57:29 +08:00
parent 42afa779db
commit f29dc93faa
11 changed files with 96 additions and 32 deletions

View File

@@ -1152,7 +1152,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
} else {
showDeniedTips(
requireContext(),
"为了实现连麦及语音输入等功能,请您允许应用向您获取“麦克风”权限"
ResUtil.getString(R.string.permission_denied_tips_mic)
)
}
}, { throwable: Throwable? -> toast("发生一些异常,请稍后重试!") })

View File

@@ -34,6 +34,7 @@ import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;
import androidx.annotation.ColorInt;
import androidx.core.util.Consumer;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
@@ -114,7 +115,6 @@ import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -815,6 +815,7 @@ public abstract class BaseActivity extends RxAppCompatActivity
* 权限回调接口
*/
rxPermissions.request(mPerms)
.compose(bindToLifecycle())
.subscribe(aBoolean -> {
if (aBoolean && listener != null) {
listener.superPermission();
@@ -826,6 +827,7 @@ public abstract class BaseActivity extends RxAppCompatActivity
@SuppressLint("CheckResult")
public void checkPermission(Consumer<Boolean> consumer, String... mPerms) {
rxPermissions.request(mPerms)
.compose(bindToLifecycle())
.subscribe(aBoolean -> {
if (consumer != null) {
consumer.accept(aBoolean);
@@ -835,7 +837,7 @@ public abstract class BaseActivity extends RxAppCompatActivity
@SuppressLint("CheckResult")
public Observable<Boolean> checkPermission(String... mPerms) {
return rxPermissions.request(mPerms);
return rxPermissions.request(mPerms).compose(bindToLifecycle());
}
/**

View File

@@ -1,12 +1,13 @@
package com.nnbc123.app.qiyukefu
import android.Manifest
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.provider.Settings
import com.nnbc123.app.R
import com.nnbc123.app.ui.widget.dialog.CommonTipDialog
import com.nnbc123.library.utils.ResUtil
import com.qiyukf.unicorn.api.event.EventCallback
import com.qiyukf.unicorn.api.event.UnicornEventBase
import com.qiyukf.unicorn.api.event.entry.RequestPermissionEventEntry
@@ -28,18 +29,28 @@ class RequestPermissionEvent : UnicornEventBase<RequestPermissionEventEntry> {
if (p0 == null) {
return super.onDenyEvent(p0, p1)
}
if (p1?.permissionList?.firstOrNull {
it == Manifest.permission.RECORD_AUDIO
} != null) {
showDeniedTips(p0, "为了实现连麦及语音输入等功能,请您允许应用向您获取“麦克风”权限")
return true
} else if (p1?.permissionList?.firstOrNull {
it == "android.permission.CAMERA" || it == "android.permission.READ_MEDIA_IMAGES" || it == "android.permission.READ_MEDIA_VIDEO"
} != null) {
showDeniedTips(p0, "访问你的本地内容,以能正常使用图片上传、视频发送等应用功能")
return true
when (p1?.scenesType) {
RequestPermissionEventEntry.SCENES_TAKE_AUDIO -> {
showDeniedTips(p0, ResUtil.getString(R.string.permission_denied_tips_mic))
return true
}
RequestPermissionEventEntry.SCENES_SELECT_MEDIA,
RequestPermissionEventEntry.SCENES_TAKE_VIDEO,
RequestPermissionEventEntry.SCENES_SAVE_IMAGE,
RequestPermissionEventEntry.SCENES_SAVE_VIDEO,
RequestPermissionEventEntry.SCENES_SELECT_VIDEO,
RequestPermissionEventEntry.SCENES_SELECT_FILE,
RequestPermissionEventEntry.SCENES_SELECT_IMAGE,
RequestPermissionEventEntry.SCENES_TAKE_PHOTO,
RequestPermissionEventEntry.SCENES_VIDEO_CHAT -> {
showDeniedTips(p0, ResUtil.getString(R.string.permission_denied_tips_image))
return true
}
else -> {
return super.onDenyEvent(p0, p1)
}
}
return super.onDenyEvent(p0, p1)
}
private fun showDeniedTips(context: Context, message: String) {

View File

@@ -13,7 +13,6 @@ import android.text.Spanned;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -21,6 +20,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.core.util.Consumer;
import androidx.lifecycle.Lifecycle;
import com.netease.nim.uikit.api.UIKitOptions;
@@ -72,6 +72,7 @@ import com.nnbc123.core.im.custom.bean.ImTipAttachment;
import com.nnbc123.core.room.event.MessageSizeEvent;
import com.nnbc123.core.statistic.StatisticManager;
import com.nnbc123.core.statistic.protocol.StatisticsProtocol;
import com.nnbc123.library.utils.ResUtil;
import com.nnbc123.library.utils.SingleToastUtil;
import com.nnbc123.library.utils.config.BasicConfig;
import com.tbruyelle.rxpermissions2.RxPermissions;
@@ -89,7 +90,6 @@ import java.util.Map;
import io.reactivex.Observable;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
/**
@@ -230,7 +230,7 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi
IMMessage anchor = (IMMessage) getArguments().getSerializable(Extras.EXTRA_ANCHOR);
customization = (SessionCustomization) getArguments().getSerializable(Extras.EXTRA_CUSTOMIZATION);
Container container = new Container(getActivity(), sessionId, sessionType, this);
Container container = new Container(getActivity(), sessionId, sessionType, this,this::requestPermission);
if (messageListPanel == null) {
messageListPanel = new MessageListPanelEx(container, rootView, anchor, false, false);
@@ -277,13 +277,10 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi
GreetPresenter greetPresenter = new GreetPresenter(sessionId);
if (greetPresenter.isCanSendGreet()) {
greetDisposable = greetPresenter.greetMsgGetOne(AuthModel.get().getCurrentUid(), toUid)
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
if (!TextUtils.isEmpty(s)) {
sendMessage(MessageBuilder.createTextMessage(container.account,
container.sessionType, s));
}
.subscribe(s -> {
if (!TextUtils.isEmpty(s)) {
sendMessage(MessageBuilder.createTextMessage(container.account,
container.sessionType, s));
}
});
}
@@ -324,6 +321,18 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi
}
private void requestPermission(Consumer<Boolean> consumer, String deniedTips, String... perms) {
Disposable disposable = rxPermissions.request(perms).subscribe(aBoolean -> {
if (!aBoolean) {
showPermissionDeniedTipsDialog(deniedTips);
}
if (consumer != null) {
consumer.accept(aBoolean);
}
}, Throwable::printStackTrace);
compositeDisposable.add(disposable);
}
/**
* ********************** implements ModuleProxy *********************
*/
@@ -614,7 +623,7 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi
if (result) {
event.getSuccess().accept(result);
} else {
showPermissionDeniedTipsDialog("为了实现连麦及语音输入等功能,请您允许应用向您获取“麦克风”权限");
showPermissionDeniedTipsDialog(ResUtil.getString(R.string.permission_denied_tips_mic));
}
});
}

View File

@@ -987,5 +987,6 @@
<string name="gang_up_invite">开黑邀请</string>
<string name="Black_duration">开黑时长(局):</string>
<string name="diamond_inning">%d钻/局</string>
<string name="permission_denied_tips_mic">为了实现连麦及语音输入等功能,请您允许应用向您获取“麦克风”权限</string>
<string name="permission_denied_tips_image">访问你的本地内容,以能正常使用图片上传、视频发送等应用功能</string>
</resources>

View File

@@ -16,7 +16,6 @@
</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor" tools:targetApi="lollipop">@color/transparent</item>
<item name="android:windowSplashScreenAnimatedIcon" tools:targetApi="s">@mipmap/app_logo2</item>
</style>

View File

@@ -27,6 +27,7 @@ import com.hjq.toast.ToastUtils;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.nnbc123.app.ui.widget.dialog.CommonTipDialog;
import com.nnbc123.library.utils.ResUtil;
import com.trello.rxlifecycle3.android.ActivityEvent;
import com.nnbc123.app.R;
import com.nnbc123.app.base.BaseMvpActivity;
@@ -239,7 +240,7 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
private void showPermissionDeniedDialog(){
CommonTipDialog mPrivacyDialog = new CommonTipDialog(context);
mPrivacyDialog.setTipMsg("访问你的本地内容,以能正常使用图片上传、视频发送等应用功能");
mPrivacyDialog.setTipMsg(ResUtil.getString(R.string.permission_denied_tips_image));
mPrivacyDialog.setOkText("去设置");
mPrivacyDialog.setOnActionListener(
new CommonTipDialog.OnActionListener() {

View File

@@ -1,9 +1,9 @@
package com.netease.nim.uikit.business.session.actions
import android.Manifest
import android.content.Intent
import android.text.TextUtils
import com.netease.nim.uikit.R
import com.netease.nim.uikit.business.session.helper.SendImageHelper
import com.nnbc123.library.common.application.BaseApp
import com.nnbc123.library.common.base.BaseDialogFragment
import com.nnbc123.library.common.photo.PhotoProviderNew
@@ -29,7 +29,18 @@ abstract class PickImageActionNew protected constructor(
protected abstract fun onPicked(file: File)
override fun onClick() {
checkStoragePermission()
container.permissionProxy?.let {
it.requestPermission(
{ result ->
if (result) {
checkStoragePermission()
}
},
"访问你的本地内容,以能正常使用图片上传、视频发送等应用功能",
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
)
} ?: checkStoragePermission()
}
private fun checkStoragePermission() {

View File

@@ -12,6 +12,7 @@ public class Container {
public final String account;
public final SessionTypeEnum sessionType;
public final ModuleProxy proxy;
public PermissionProxy permissionProxy;
public Container(Activity activity, String account, SessionTypeEnum sessionType, ModuleProxy proxy) {
this.activity = activity;
@@ -19,4 +20,12 @@ public class Container {
this.sessionType = sessionType;
this.proxy = proxy;
}
public Container(Activity activity, String account, SessionTypeEnum sessionType, ModuleProxy proxy, PermissionProxy permissionProxy) {
this.activity = activity;
this.account = account;
this.sessionType = sessionType;
this.proxy = proxy;
this.permissionProxy = permissionProxy;
}
}

View File

@@ -0,0 +1,17 @@
package com.netease.nim.uikit.business.session.module
import androidx.core.util.Consumer
/**
* Created by Max on 2024/1/4 15:21
* Desc:
**/
interface PermissionProxy {
/**
* 申请权限
* @param consumer
* @param perms 权限列表
*/
fun requestPermission(consumer: Consumer<Boolean>, deniedTips: String, vararg perms: String)
}

View File

@@ -11,6 +11,8 @@ import android.view.inputmethod.InputMethodManager;
import com.netease.nim.uikit.common.activity.UI;
import com.netease.nim.uikit.common.util.log.LogUtil;
import io.reactivex.disposables.CompositeDisposable;
public abstract class TFragment extends Fragment {
private static final Handler handler = new Handler();
@@ -18,6 +20,8 @@ public abstract class TFragment extends Fragment {
private boolean destroyed;
protected CompositeDisposable compositeDisposable = new CompositeDisposable();
protected final boolean isDestroyed() {
return destroyed;
}
@@ -42,7 +46,7 @@ public abstract class TFragment extends Fragment {
super.onDestroy();
LogUtil.ui("fragment: " + getClass().getSimpleName() + " onDestroy()");
compositeDisposable.dispose();
destroyed = true;
}