fix:修复私聊未互相关注也可以发消息bug

This commit is contained in:
Max
2023-11-13 17:31:44 +08:00
parent 5cddd9f18d
commit f1ae820a5a
5 changed files with 83 additions and 63 deletions

View File

@@ -830,13 +830,17 @@ public class MessageListPanelEx {
if (messages == null) { if (messages == null) {
return; return;
} }
List<IMMessage> tempMessages = new ArrayList<>(); boolean isEmptyTextMessage = true;
for (IMMessage message : messages) { for (IMMessage message : messages) {
if (message.getMsgType() == MsgTypeEnum.text) { if (message.getMsgType() == MsgTypeEnum.text) {
tempMessages.add(message); String messageContext = message.getContent();
if (!messageContext.equals("我对你很感兴趣并关注了你~快来和我成为好友一起玩吧")) {
isEmptyTextMessage = false;
break;
} }
} }
EventBus.getDefault().post(new MessageSizeEvent(tempMessages.size())); }
EventBus.getDefault().post(new MessageSizeEvent(isEmptyTextMessage));
if (onMessageFilterListener != null) { if (onMessageFilterListener != null) {
messages = onMessageFilterListener.filterLoadedMessage(messages); messages = onMessageFilterListener.filterLoadedMessage(messages);
} }

View File

@@ -625,6 +625,7 @@ public class NimP2PMessageActivity extends NewBaseMessageActivity {
tvAttention.setVisibility(View.GONE); tvAttention.setVisibility(View.GONE);
tvAttention.setOnClickListener(null); tvAttention.setOnClickListener(null);
toast(event.isPraise() ? R.string.attention_success : R.string.cancel_fan_success); toast(event.isPraise() ? R.string.attention_success : R.string.cancel_fan_success);
messageFragment.reloadChatLimitIfLimited();
} }
@Subscribe(threadMode = ThreadMode.MAIN) @Subscribe(threadMode = ThreadMode.MAIN)

View File

@@ -19,6 +19,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.lifecycle.Lifecycle;
import com.netease.nim.uikit.api.UIKitOptions; import com.netease.nim.uikit.api.UIKitOptions;
import com.netease.nim.uikit.api.model.main.CustomPushContentProvider; import com.netease.nim.uikit.api.model.main.CustomPushContentProvider;
@@ -590,10 +591,72 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi
@Subscribe(threadMode = ThreadMode.MAIN) @Subscribe(threadMode = ThreadMode.MAIN)
public void onReloadInputPanel(MessageSizeEvent event) { public void onReloadInputPanel(MessageSizeEvent event) {
if (inputPanel != null) { if (inputPanel != null) {
if (event.getSize() > 0) { if (!event.textMessageIsEmpty) {
tvChatLimit.setVisibility(View.GONE); tvChatLimit.setVisibility(View.GONE);
inputPanel.setLimitLevel(true, ""); inputPanel.setLimitLevel(true, "");
} else { } else {
loadChatLimit();
}
}
}
@SuppressLint("CheckResult")
public Observable<Boolean> checkPermission(String... mPerms) {
return rxPermissions.request(mPerms);
}
@Subscribe(threadMode = ThreadMode.MAIN)
@SuppressLint("CheckResult")
public void onNimAudioChatEvent(NimAudioChatEvent event) {
checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO)
.subscribe(result -> {
if (result) {
event.getSuccess().accept(result);
} else {
SingleToastUtil.showToast(getString(R.string.ask_again));
}
});
}
@Subscribe(threadMode = ThreadMode.MAIN)
@SuppressLint("CheckResult")
public void onNimImageActionEvent(NimImageActionEvent event) {
checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA)
.subscribe(result -> {
if (result) {
event.getSuccess().accept(result);
} else {
SingleToastUtil.showToast(getString(R.string.ask_again));
}
});
}
public void setLimitLevel(int limitLevel) {
}
//
//
public void setCurrentLevel(int currentLevel) {
}
public void reloadChatLimitIfLimited() {
if (!getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.CREATED)) {
return;
}
if (inputPanel == null) {
return;
}
if (!inputPanel.getLimitLevel()) {
loadChatLimit();
}
}
@SuppressLint("CheckResult")
private void loadChatLimit(){
IMCustomModel.get().getPrivateChatLimit(sessionId).subscribe(((privateChatLimitInfo, throwable) -> { IMCustomModel.get().getPrivateChatLimit(sessionId).subscribe(((privateChatLimitInfo, throwable) -> {
if (throwable != null) { if (throwable != null) {
throwable.printStackTrace(); throwable.printStackTrace();
@@ -644,50 +707,4 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi
} }
})); }));
} }
}
}
@SuppressLint("CheckResult")
public Observable<Boolean> checkPermission(String... mPerms) {
return rxPermissions.request(mPerms);
}
@Subscribe(threadMode = ThreadMode.MAIN)
@SuppressLint("CheckResult")
public void onNimAudioChatEvent(NimAudioChatEvent event) {
checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO)
.subscribe(result -> {
if (result) {
event.getSuccess().accept(result);
} else {
SingleToastUtil.showToast(getString(R.string.ask_again));
}
});
}
@Subscribe(threadMode = ThreadMode.MAIN)
@SuppressLint("CheckResult")
public void onNimImageActionEvent(NimImageActionEvent event) {
checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA)
.subscribe(result -> {
if (result) {
event.getSuccess().accept(result);
} else {
SingleToastUtil.showToast(getString(R.string.ask_again));
}
});
}
public void setLimitLevel(int limitLevel) {
}
//
//
public void setCurrentLevel(int currentLevel) {
}
} }

View File

@@ -3,17 +3,11 @@ package com.nnbc123.core.room.event;
import java.io.Serializable; import java.io.Serializable;
public class MessageSizeEvent implements Serializable { public class MessageSizeEvent implements Serializable {
private int size;
public int getSize() { // 文本消息是否空(忽略了关注提醒文本消息)
return size; public boolean textMessageIsEmpty;
}
public void setSize(int size) { public MessageSizeEvent(boolean textMessageIsEmpty) {
this.size = size; this.textMessageIsEmpty = textMessageIsEmpty;
}
public MessageSizeEvent(int size) {
this.size = size;
} }
} }

View File

@@ -959,6 +959,10 @@ public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallba
setEditTextState(); setEditTextState();
} }
public boolean getLimitLevel() {
return isChat;
}
private void setEditTextState() { private void setEditTextState() {
if (!isChat) { if (!isChat) {
messageEditText.setHint(hintText); messageEditText.setHint(hintText);