feat:私聊、公聊、房间、支持垃圾字检测
This commit is contained in:
@@ -41,6 +41,7 @@ import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseFetchLoadAdapter
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.adapter.IRecyclerView;
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.listener.OnItemClickListener;
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.loadmore.MsgListFetchLoadMoreView;
|
||||
import com.netease.nim.uikit.common.util.AntiSpamUtil;
|
||||
import com.netease.nim.uikit.common.util.media.BitmapDecoder;
|
||||
import com.netease.nim.uikit.common.util.sys.ClipboardUtil;
|
||||
import com.netease.nim.uikit.common.util.sys.NetworkUtil;
|
||||
@@ -449,19 +450,12 @@ public class MessageListPanelEx {
|
||||
int index = getItemIndex(message.getUuid());
|
||||
if (index >= 0 && index < items.size()) {
|
||||
IMMessage item = items.get(index);
|
||||
String antiSpamRes = message.getYidunAntiSpamRes();
|
||||
if (!TextUtils.isEmpty(antiSpamRes)) {
|
||||
JSONObject jsonObject = JSON.parseObject(antiSpamRes);
|
||||
if (jsonObject.getIntValue("suggestion") == 2) {
|
||||
item.setStatus(MsgStatusEnum.fail);
|
||||
NIMClient.getService(MsgService.class).updateIMMessageStatus(item);
|
||||
} else {
|
||||
item.setStatus(message.getStatus());
|
||||
}
|
||||
if (AntiSpamUtil.isAntiSpam(message)) {
|
||||
item.setStatus(MsgStatusEnum.fail);
|
||||
NIMClient.getService(MsgService.class).updateIMMessageStatus(item);
|
||||
} else {
|
||||
item.setStatus(message.getStatus());
|
||||
}
|
||||
|
||||
item.setAttachStatus(message.getAttachStatus());
|
||||
|
||||
// 处理语音、音视频通话
|
||||
@@ -1052,6 +1046,9 @@ public class MessageListPanelEx {
|
||||
if (message.getDirect() == MsgDirectionEnum.Out) {
|
||||
// 发出的消息,如果是发送失败,直接重发,否则有可能是漫游到的多媒体消息,但文件下载
|
||||
if (message.getStatus() == MsgStatusEnum.fail) {
|
||||
if (AntiSpamUtil.isAntiSpam(message)) {
|
||||
return;
|
||||
}
|
||||
resendMessage(message); // 重发
|
||||
} else {
|
||||
if (message.getAttachment() instanceof FileAttachment) {
|
||||
|
@@ -1,24 +1,10 @@
|
||||
package com.chwl.app.ui.im.chat;
|
||||
|
||||
import android.graphics.Color;
|
||||
import android.text.SpannableString;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextUtils;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.netease.nim.uikit.business.session.viewholder.MsgViewHolderBase;
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseMultiItemFetchLoadAdapter;
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.app.common.widget.OriginalDrawStatusClickSpan;
|
||||
import com.chwl.app.ui.webview.SimpleWebViewActivity;
|
||||
import com.chwl.core.UriProvider;
|
||||
import com.chwl.core.im.custom.bean.ChatHintAttachment;
|
||||
import com.chwl.library.utils.ResUtil;
|
||||
|
||||
public class MsgViewHolderChatHint extends MsgViewHolderBase {
|
||||
|
||||
@@ -58,30 +44,7 @@ public class MsgViewHolderChatHint extends MsgViewHolderBase {
|
||||
ChatHintAttachment attachment = (ChatHintAttachment) message.getAttachment();
|
||||
if (attachment != null) {
|
||||
String content = attachment.getContent();
|
||||
String restoreTitle = ResUtil.getString(R.string.im_chat_msgviewholderchathint_01);
|
||||
if (TextUtils.isEmpty(content) || !content.contains(restoreTitle)) {
|
||||
tvContent.setText(content);
|
||||
} else {
|
||||
SpannableString ss = new SpannableString(content);
|
||||
int restoreTitleIndex = content.indexOf(restoreTitle);
|
||||
ss.setSpan(
|
||||
new ForegroundColorSpan(Color.parseColor("#FB486A")),
|
||||
restoreTitleIndex,
|
||||
restoreTitleIndex + restoreTitle.length(),
|
||||
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
ss.setSpan(
|
||||
new OriginalDrawStatusClickSpan() {
|
||||
@Override
|
||||
public void onClick(@NonNull View widget) {
|
||||
SimpleWebViewActivity.start(context, UriProvider.getLiveAgreement());
|
||||
}
|
||||
},
|
||||
restoreTitleIndex,
|
||||
restoreTitleIndex + restoreTitle.length(),
|
||||
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
tvContent.setText(ss);
|
||||
tvContent.setMovementMethod(new LinkMovementMethod());
|
||||
}
|
||||
tvContent.setText(content);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -29,7 +29,6 @@ import com.netease.nim.uikit.business.session.constant.Extras;
|
||||
import com.netease.nim.uikit.business.session.module.Container;
|
||||
import com.netease.nim.uikit.business.session.module.ModuleProxy;
|
||||
import com.netease.nim.uikit.business.session.module.input.InputPanel;
|
||||
import com.netease.nim.uikit.business.session.module.input.NimAudioChatEvent;
|
||||
import com.netease.nim.uikit.business.session.module.input.NimImageActionEvent;
|
||||
import com.netease.nim.uikit.common.fragment.TFragment;
|
||||
import com.netease.nim.uikit.impl.NimUIKitImpl;
|
||||
|
@@ -5,12 +5,10 @@ import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Handler;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.app.public_chat.core.ChatRoomClientManager;
|
||||
import com.chwl.app.public_chat.core.ChatRoomMessageAdapter;
|
||||
@@ -34,6 +32,7 @@ import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseFetchLoadAdapter
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.adapter.IRecyclerView;
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.listener.OnItemClickListener;
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.loadmore.MsgListFetchLoadMoreView;
|
||||
import com.netease.nim.uikit.common.util.AntiSpamUtil;
|
||||
import com.netease.nim.uikit.common.util.sys.ClipboardUtil;
|
||||
import com.netease.nim.uikit.impl.NimUIKitImpl;
|
||||
import com.netease.nimlib.sdk.NIMClient;
|
||||
@@ -335,7 +334,12 @@ public class PublicChatRoomMessageListPanel {
|
||||
int index = getItemIndex(message.getUuid());
|
||||
if (index >= 0 && index < items.size()) {
|
||||
ChatRoomMessage item = items.get(index);
|
||||
item.setStatus(message.getStatus());
|
||||
if (AntiSpamUtil.isAntiSpam(message)) {
|
||||
item.setStatus(MsgStatusEnum.fail);
|
||||
NIMClient.getService(MsgService.class).updateIMMessageStatus(item);
|
||||
} else {
|
||||
item.setStatus(message.getStatus());
|
||||
}
|
||||
item.setAttachStatus(message.getAttachStatus());
|
||||
|
||||
// 处理语音、音视频通话
|
||||
@@ -622,6 +626,9 @@ public class PublicChatRoomMessageListPanel {
|
||||
if (message.getDirect() == MsgDirectionEnum.Out) {
|
||||
// 发出的消息,如果是发送失败,直接重发,否则有可能是漫游到的多媒体消息,但文件下载
|
||||
if (message.getStatus() == MsgStatusEnum.fail) {
|
||||
if (AntiSpamUtil.isAntiSpam(message)) {
|
||||
return;
|
||||
}
|
||||
resendMessage(message); // 重发
|
||||
} else {
|
||||
if (message.getAttachment() instanceof FileAttachment) {
|
||||
|
@@ -12,6 +12,10 @@ import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_HALL_
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import com.chwl.core.R;
|
||||
import com.chwl.library.utils.ResUtil;
|
||||
import com.chwl.library.utils.SingleToastUtil;
|
||||
import com.netease.nim.uikit.common.util.AntiSpamUtil;
|
||||
import com.netease.nimlib.sdk.InvocationFuture;
|
||||
import com.netease.nimlib.sdk.NIMClient;
|
||||
import com.netease.nimlib.sdk.Observer;
|
||||
@@ -85,7 +89,9 @@ public class IMMessageManager {
|
||||
private void registerMsgStatusObserver() {
|
||||
Observer<IMMessage> msgStatusObserver = (Observer<IMMessage>) imMessages -> {
|
||||
if (imMessages != null) {
|
||||
|
||||
if (String.valueOf(AuthModel.get().getCurrentUid()).equals(imMessages.getFromAccount()) && AntiSpamUtil.isAntiSpam(imMessages)) {
|
||||
SingleToastUtil.showToast(ResUtil.getString(R.string.xchat_android_core_manager_imneteasemanager_05));
|
||||
}
|
||||
}
|
||||
};
|
||||
NIMClient.getService(MsgServiceObserve.class).observeMsgStatus(
|
||||
|
@@ -488,14 +488,9 @@ public final class IMNetEaseManager {
|
||||
private void registerMsgStatusObserver() {
|
||||
Observer<ChatRoomMessage> msgStatusObserver = (Observer<ChatRoomMessage>) message -> {
|
||||
if (message != null) {
|
||||
String antiSpamRes = message.getYidunAntiSpamRes();
|
||||
if (!TextUtils.isEmpty(antiSpamRes) && String.valueOf(AuthModel.get().getCurrentUid()).equals(message.getFromAccount())) {
|
||||
JSONObject jsonObject = JSON.parseObject(antiSpamRes);
|
||||
if (jsonObject.getIntValue("suggestion") == 2) {
|
||||
SingleToastUtil.showToast(ResUtil.getString(R.string.xchat_android_core_manager_imneteasemanager_05));
|
||||
}
|
||||
if (String.valueOf(AuthModel.get().getCurrentUid()).equals(message.getFromAccount()) && AntiSpamUtil.isAntiSpam(message)) {
|
||||
SingleToastUtil.showToast(ResUtil.getString(R.string.xchat_android_core_manager_imneteasemanager_05));
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
NIMClient.getService(ChatRoomServiceObserver.class).observeMsgStatus(
|
||||
@@ -2119,9 +2114,9 @@ public final class IMNetEaseManager {
|
||||
chatRoomMessage.setLocalExtension(atProxy.getAtExtensionMap());
|
||||
atProxy.reset();
|
||||
}
|
||||
NIMAntiSpamOption antiSpamOption = new NIMAntiSpamOption();
|
||||
antiSpamOption.antiSpamConfigId = XConstants.CHAT_ROOM_ANTI_SPAM_CONFIG_ID;
|
||||
chatRoomMessage.setNIMAntiSpamOption(antiSpamOption);
|
||||
// NIMAntiSpamOption antiSpamOption = new NIMAntiSpamOption();
|
||||
// antiSpamOption.antiSpamConfigId = XConstants.CHAT_ROOM_ANTI_SPAM_CONFIG_ID;
|
||||
// chatRoomMessage.setNIMAntiSpamOption(antiSpamOption);
|
||||
if (AntiSpamUtil.checkLocalAntiSpam(chatRoomMessage)) {
|
||||
EventBus.getDefault().post(new AntiSpamEvent());
|
||||
return Single.error(new AntiSpamHitException("檢測到敏感詞,需要過濾,不能發送"));
|
||||
|
@@ -73,7 +73,7 @@
|
||||
<string name="xchat_android_core_manager_imneteasemanager_02">حقل معلومات المستخدم فارغ</string>
|
||||
<string name="xchat_android_core_manager_imneteasemanager_03">غير موجود في الغرفة أو معلومات الغرفة فارغة</string>
|
||||
<string name="xchat_android_core_manager_imneteasemanager_04">تم استقبال معلومات الطرد</string>
|
||||
<string name="xchat_android_core_manager_imneteasemanager_05">قد تحتوي الرسالة على محتوى ممنوع، يرجى التوقف عن إرسال رسائل مماثلة!</string>
|
||||
<string name="xchat_android_core_manager_imneteasemanager_05">قد تحتوي الرسالة على معلومات غير قانونية، يرجى التوقف عن إرسال معلومات مماثلة مثل ذلك!</string>
|
||||
<string name="xchat_android_core_manager_imneteasemanager_06">جاري الاتصال...</string>
|
||||
<string name="xchat_android_core_manager_imneteasemanager_07">حالة غير طبيعية في غرفة الدردشة!</string>
|
||||
<string name="xchat_android_core_manager_imneteasemanager_08">حالة الاتصال بغرفة الدردشة تصبح غير متصلة!</string>
|
||||
|
@@ -71,7 +71,7 @@
|
||||
<string name="xchat_android_core_manager_imneteasemanager_02">User information field is empty</string>
|
||||
<string name="xchat_android_core_manager_imneteasemanager_03">Not in the room or room information is empty</string>
|
||||
<string name="xchat_android_core_manager_imneteasemanager_04">Received kick-out information</string>
|
||||
<string name="xchat_android_core_manager_imneteasemanager_05">The message may contain prohibited content, please stop sending similar messages!</string>
|
||||
<string name="xchat_android_core_manager_imneteasemanager_05">The message may contain illegal information, please stop sending similar information like that!</string>
|
||||
<string name="xchat_android_core_manager_imneteasemanager_06">Connecting...</string>
|
||||
<string name="xchat_android_core_manager_imneteasemanager_07">Chat room status abnormal!</string>
|
||||
<string name="xchat_android_core_manager_imneteasemanager_08">Chat room online status becomes UNLOGIN!</string>
|
||||
|
@@ -25,6 +25,7 @@ import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseFetchLoadAdapter
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.adapter.IRecyclerView;
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.listener.OnItemClickListener;
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.loadmore.MsgListFetchLoadMoreView;
|
||||
import com.netease.nim.uikit.common.util.AntiSpamUtil;
|
||||
import com.netease.nimlib.sdk.NIMClient;
|
||||
import com.netease.nimlib.sdk.Observer;
|
||||
import com.netease.nimlib.sdk.RequestCallback;
|
||||
@@ -408,6 +409,9 @@ public class ChatRoomMsgListPanel {
|
||||
if (message.getDirect() == MsgDirectionEnum.Out) {
|
||||
// 发出的消息,如果是发送失败,直接重发,否则有可能是漫游到的多媒体消息,但文件下载
|
||||
if (message.getStatus() == MsgStatusEnum.fail) {
|
||||
if (AntiSpamUtil.isAntiSpam(message)) {
|
||||
return;
|
||||
}
|
||||
resendMessage(message); // 重发
|
||||
} else {
|
||||
if (message.getAttachment() instanceof FileAttachment) {
|
||||
|
@@ -33,6 +33,7 @@ import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseFetchLoadAdapter
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.adapter.IRecyclerView;
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.listener.OnItemClickListener;
|
||||
import com.netease.nim.uikit.common.ui.recyclerview.loadmore.MsgListFetchLoadMoreView;
|
||||
import com.netease.nim.uikit.common.util.AntiSpamUtil;
|
||||
import com.netease.nim.uikit.common.util.media.BitmapDecoder;
|
||||
import com.netease.nim.uikit.common.util.sys.ClipboardUtil;
|
||||
import com.netease.nim.uikit.common.util.sys.NetworkUtil;
|
||||
@@ -723,6 +724,9 @@ public class MessageListPanelEx {
|
||||
if (message.getDirect() == MsgDirectionEnum.Out) {
|
||||
// 发出的消息,如果是发送失败,直接重发,否则有可能是漫游到的多媒体消息,但文件下载
|
||||
if (message.getStatus() == MsgStatusEnum.fail) {
|
||||
if (AntiSpamUtil.isAntiSpam(message)) {
|
||||
return;
|
||||
}
|
||||
resendMessage(message); // 重发
|
||||
} else {
|
||||
if (message.getAttachment() instanceof FileAttachment) {
|
||||
|
@@ -1,12 +1,35 @@
|
||||
package com.netease.nim.uikit.common.util;
|
||||
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.netease.nimlib.sdk.NIMClient;
|
||||
import com.netease.nimlib.sdk.msg.MsgService;
|
||||
import com.netease.nimlib.sdk.msg.constant.MsgStatusEnum;
|
||||
import com.netease.nimlib.sdk.msg.model.IMMessage;
|
||||
import com.netease.nimlib.sdk.msg.model.LocalAntiSpamResult;
|
||||
|
||||
public class AntiSpamUtil {
|
||||
|
||||
public static boolean isAntiSpam(IMMessage message) {
|
||||
try {
|
||||
if (message == null) {
|
||||
return false;
|
||||
}
|
||||
String antiSpamRes = message.getYidunAntiSpamRes();
|
||||
if (!TextUtils.isEmpty(antiSpamRes)) {
|
||||
JSONObject jsonObject = JSON.parseObject(antiSpamRes);
|
||||
if (jsonObject.getIntValue("suggestion") == 2) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 云信检验本地反垃圾词库
|
||||
*
|
||||
@@ -17,7 +40,7 @@ public class AntiSpamUtil {
|
||||
String text = message.getContent();
|
||||
LocalAntiSpamResult result = NIMClient.getService(MsgService.class)
|
||||
.checkLocalAntiSpam(text, "***");
|
||||
message.setContent(result.getContent()==null?"":result.getContent());
|
||||
message.setContent(result.getContent() == null ? "" : result.getContent());
|
||||
|
||||
if (result.getOperator() != 0) {
|
||||
//Map<String, Object> map = message.getRemoteExtension();
|
||||
|
Reference in New Issue
Block a user