feat:调整客服中心权限拒绝提示判断;增加私聊图片权限检测与提示;
This commit is contained in:
@@ -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("发生一些异常,请稍后重试!") })
|
||||
|
@@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -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) {
|
||||
|
@@ -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));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@@ -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>
|
||||
|
@@ -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>
|
||||
|
||||
|
||||
|
@@ -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() {
|
||||
|
@@ -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() {
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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)
|
||||
}
|
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user