Skip to content

Commit 5671c68

Browse files
authored
Merge pull request #532 from easemob/dev_3.9.7
3.9.7
2 parents 73e17c2 + 8b31c37 commit 5671c68

32 files changed

+836
-245
lines changed

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
## NEXT
22

3+
## 3.9.7
4+
5+
新增特性:
6+
1. 新增聊天室自定义属性功能。
7+
2. 新增 `areaCode` 方法限制连接边缘节点的范围。
8+
3. `EMGroup` 中增加 `isDisabled` 属性显示群组禁用状态,需要开发者在服务端设置。该属性在调用 `EMGroupManager` 中的 `fetchGroupInfoFromServer` 方法获取群组详情时返回。
9+
10+
优化:
11+
1. 移除 SDK 一部分冗余日志。
12+
13+
修复
14+
1. 修复极少数场景下,从服务器获取较大数量的消息时失败的问题。
15+
2. 修复数据统计不正确的问题。
16+
3. 修复极少数场景下打印日志导致的崩溃。
17+
318
## 3.9.5
419

520
- 将 AddManagerListener 方法标为过期;

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,5 @@ tasks.withType(JavaCompile){
4949

5050
dependencies {
5151
api 'androidx.appcompat:appcompat:1.1.0'
52-
implementation 'io.hyphenate:hyphenate-chat:3.9.5'
52+
implementation 'io.hyphenate:hyphenate-chat:3.9.7'
5353
}

android/src/main/java/com/easemob/im_flutter_sdk/EMChatManagerWrapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,9 +436,9 @@ public void onError(int code, String desc) {
436436
}
437437

438438
private void loadAllConversations(JSONObject param, String channelName, Result result) throws JSONException {
439+
List<EMConversation> list = new ArrayList<>(EMClient.getInstance().chatManager().getAllConversations().values());
439440
asyncRunnable(() -> {
440441
boolean retry = false;
441-
List<EMConversation> list = new ArrayList<>(EMClient.getInstance().chatManager().getAllConversations().values());
442442
List<Map> conversations = new ArrayList<>();
443443
do{
444444
try{

android/src/main/java/com/easemob/im_flutter_sdk/EMChatRoomManagerWrapper.java

Lines changed: 144 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.easemob.im_flutter_sdk;
22

33
import com.hyphenate.EMChatRoomChangeListener;
4+
import com.hyphenate.EMError;
5+
import com.hyphenate.EMResultCallBack;
46
import com.hyphenate.chat.EMChatRoom;
57
import com.hyphenate.chat.EMClient;
8+
import com.hyphenate.chat.EMConversation;
69
import com.hyphenate.chat.EMCursorResult;
710
import com.hyphenate.chat.EMGroupInfo;
811
import com.hyphenate.chat.EMPageResult;
@@ -14,6 +17,7 @@
1417

1518
import java.util.ArrayList;
1619
import java.util.HashMap;
20+
import java.util.Iterator;
1721
import java.util.List;
1822
import java.util.Map;
1923

@@ -95,6 +99,12 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) {
9599
muteAllChatRoomsMembers(param, call.method, result);
96100
} else if (EMSDKMethod.unMuteAllChatRoomMembers.equals(call.method)) {
97101
unMuteAllChatRoomsMembers(param, call.method, result);
102+
} else if (EMSDKMethod.fetchChatRoomAttributes.equals(call.method)){
103+
fetchChatRoomAttributes(param, call.method, result);
104+
} else if (EMSDKMethod.setChatRoomAttributes.equals(call.method)){
105+
setChatRoomAttributes(param, call.method, result);
106+
} else if (EMSDKMethod.removeChatRoomAttributes.equals(call.method)){
107+
removeChatRoomAttributes(param, call.method, result);
98108
} else {
99109
super.onMethodCall(call, result);
100110
}
@@ -563,6 +573,87 @@ public void onSuccess(EMChatRoom object) {
563573
EMClient.getInstance().chatroomManager().unmuteAllMembers(roomId, callback);
564574
}
565575

576+
public void fetchChatRoomAttributes(JSONObject param, String channelName, MethodChannel.Result result) throws JSONException {
577+
String roomId = param.getString("roomId");
578+
List<String> keys = new ArrayList<>();
579+
if (param.has("keys")){
580+
JSONArray array = param.getJSONArray("keys");
581+
for (int i = 0; i < array.length(); i++) {
582+
keys.add(array.getString(i));
583+
}
584+
}
585+
EMClient.getInstance().chatroomManager().asyncFetchChatroomAttributesFromServer(roomId, keys, new EMValueWrapperCallBack(result, channelName));
586+
}
587+
588+
public void setChatRoomAttributes(JSONObject param, String channelName, MethodChannel.Result result) throws JSONException {
589+
String roomId = param.getString("roomId");
590+
Map<String, String> attributes = new HashMap<>();
591+
if (param.has("attributes")) {
592+
JSONObject jsonObject = param.getJSONObject("attributes");
593+
Iterator iterator = jsonObject.keys();
594+
while (iterator.hasNext()) {
595+
String key = iterator.next().toString();
596+
attributes.put(key, jsonObject.getString(key));
597+
}
598+
}
599+
boolean autoDelete = false;
600+
if (param.has("autoDelete")) {
601+
autoDelete = param.getBoolean("autoDelete");
602+
}
603+
boolean forced = false;
604+
if(param.has("forced")) {
605+
forced = param.getBoolean("forced");
606+
}
607+
608+
EMChatRoomManagerWrapper current = this;
609+
610+
EMResultCallBack callback = (EMResultCallBack<Map<String, Integer>>) (code, value) -> asyncRunnable(()->{
611+
if (value.size() > 0 || code == EMError.EM_NO_ERROR) {
612+
current.onSuccess(result, channelName, value);
613+
}else {
614+
HyphenateException e = new HyphenateException(code, "");
615+
current.onError(result, e);
616+
}
617+
});
618+
619+
if (forced) {
620+
EMClient.getInstance().chatroomManager().asyncSetChatroomAttributesForced(roomId, attributes, autoDelete, callback);
621+
}else {
622+
EMClient.getInstance().chatroomManager().asyncSetChatroomAttributes(roomId, attributes, autoDelete, callback);
623+
}
624+
}
625+
626+
public void removeChatRoomAttributes(JSONObject param, String channelName, MethodChannel.Result result) throws JSONException {
627+
String roomId = param.getString("roomId");
628+
List<String> keys = new ArrayList<String>();
629+
if (param.has("keys")){
630+
JSONArray array = param.getJSONArray("keys");
631+
for (int i = 0; i < array.length(); i++) {
632+
keys.add(array.getString(i));
633+
}
634+
}
635+
636+
boolean forced = false;
637+
if(param.has("forced")) {
638+
forced = param.getBoolean("forced");
639+
}
640+
641+
EMChatRoomManagerWrapper current = this;
642+
EMResultCallBack callback = (EMResultCallBack<Map<String, Integer>>) (code, value) -> asyncRunnable(()->{
643+
if (value.size() > 0 || code == EMError.EM_NO_ERROR) {
644+
current.onSuccess(result, channelName, value);
645+
}else {
646+
HyphenateException e = new HyphenateException(code, "");
647+
current.onError(result, e);
648+
}
649+
});
650+
if (forced){
651+
EMClient.getInstance().chatroomManager().asyncRemoveChatRoomAttributesFromServerForced(roomId, keys, callback);
652+
}else {
653+
EMClient.getInstance().chatroomManager().asyncRemoveChatRoomAttributesFromServer(roomId, keys, callback);
654+
}
655+
}
656+
566657
private void registerEaseListener() {
567658

568659
chatRoomChangeListener = new EMChatRoomChangeListener() {
@@ -574,7 +665,7 @@ public void onWhiteListAdded(String chatRoomId, List<String> whitelist) {
574665
Map<String, Object> data = new HashMap<>();
575666
data.put("roomId", chatRoomId);
576667
data.put("whitelist", whitelist);
577-
data.put("type", "onWhiteListAdded");
668+
data.put("type", "chatroomWhiteListAdded");
578669
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
579670
}
580671
);
@@ -588,7 +679,7 @@ public void onWhiteListRemoved(String chatRoomId, List<String> whitelist) {
588679
Map<String, Object> data = new HashMap<>();
589680
data.put("roomId", chatRoomId);
590681
data.put("whitelist", whitelist);
591-
data.put("type", "onWhiteListRemoved");
682+
data.put("type", "chatroomWhiteListRemoved");
592683
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
593684
}
594685
);
@@ -601,7 +692,7 @@ public void onAllMemberMuteStateChanged(String chatRoomId, boolean isMuted) {
601692
Map<String, Object> data = new HashMap<>();
602693
data.put("roomId", chatRoomId);
603694
data.put("isMuted", isMuted);
604-
data.put("type", "onAllMemberMuteStateChanged");
695+
data.put("type", "chatroomAllMemberMuteStateChanged");
605696
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
606697
}
607698
);
@@ -615,7 +706,7 @@ public void onChatRoomDestroyed(String roomId, String roomName) {
615706
Map<String, Object> data = new HashMap<>();
616707
data.put("roomId", roomId);
617708
data.put("roomName", roomName);
618-
data.put("type", "onChatRoomDestroyed");
709+
data.put("type", "chatroomDestroyed");
619710
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
620711
}
621712
);
@@ -629,7 +720,7 @@ public void onMemberJoined(String roomId, String participant) {
629720
Map<String, Object> data = new HashMap<>();
630721
data.put("roomId", roomId);
631722
data.put("participant", participant);
632-
data.put("type", "onMemberJoined");
723+
data.put("type", "chatroomMemberJoined");
633724
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
634725
}
635726
);
@@ -643,7 +734,7 @@ public void onMemberExited(String roomId, String roomName, String participant) {
643734
data.put("roomId", roomId);
644735
data.put("roomName", roomName);
645736
data.put("participant", participant);
646-
data.put("type", "onMemberExited");
737+
data.put("type", "chatroomMemberExited");
647738
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
648739
}
649740
);
@@ -658,7 +749,7 @@ public void onRemovedFromChatRoom(int reason, String roomId, String roomName, St
658749
data.put("roomId", roomId);
659750
data.put("roomName", roomName);
660751
data.put("participant", participant);
661-
data.put("type", "onRemovedFromChatRoom");
752+
data.put("type", "chatroomRemovedFromChatRoom");
662753
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
663754
}
664755
);
@@ -673,7 +764,7 @@ public void onMuteListAdded(String chatRoomId, List<String> mutes, long expireTi
673764
data.put("roomId", chatRoomId);
674765
data.put("mutes", mutes);
675766
data.put("expireTime", String.valueOf(expireTime));
676-
data.put("type", "onMuteListAdded");
767+
data.put("type", "chatroomMuteListAdded");
677768
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
678769
}
679770
);
@@ -686,7 +777,7 @@ public void onMuteListRemoved(String chatRoomId, List<String> mutes) {
686777
Map<String, Object> data = new HashMap<>();
687778
data.put("roomId", chatRoomId);
688779
data.put("mutes", mutes);
689-
data.put("type", "onMuteListRemoved");
780+
data.put("type", "chatroomMuteListRemoved");
690781
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
691782
}
692783
);
@@ -700,7 +791,7 @@ public void onAdminAdded(String chatRoomId, String admin) {
700791
Map<String, Object> data = new HashMap<>();
701792
data.put("roomId", chatRoomId);
702793
data.put("admin", admin);
703-
data.put("type", "onAdminAdded");
794+
data.put("type", "chatroomAdminAdded");
704795
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
705796
}
706797
);
@@ -714,7 +805,7 @@ public void onAdminRemoved(String chatRoomId, String admin) {
714805
Map<String, Object> data = new HashMap<>();
715806
data.put("roomId", chatRoomId);
716807
data.put("admin", admin);
717-
data.put("type", "onAdminRemoved");
808+
data.put("type", "chatroomAdminRemoved");
718809
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
719810
}
720811
);
@@ -728,7 +819,7 @@ public void onOwnerChanged(String chatRoomId, String newOwner, String oldOwner)
728819
data.put("roomId", chatRoomId);
729820
data.put("newOwner", newOwner);
730821
data.put("oldOwner", oldOwner);
731-
data.put("type", "onOwnerChanged");
822+
data.put("type", "chatroomOwnerChanged");
732823
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
733824
}
734825
);
@@ -742,7 +833,47 @@ public void onAnnouncementChanged(String chatRoomId, String announcement) {
742833
Map<String, Object> data = new HashMap<>();
743834
data.put("roomId", chatRoomId);
744835
data.put("announcement", announcement);
745-
data.put("type", "onAnnouncementChanged");
836+
data.put("type", "chatroomAnnouncementChanged");
837+
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
838+
}
839+
);
840+
}
841+
842+
@Override
843+
public void onSpecificationChanged(EMChatRoom room) {
844+
EMListenerHandle.getInstance().addHandle(
845+
()-> {
846+
Map<String, Object> data = new HashMap<>();
847+
data.put("room", EMChatRoomHelper.toJson(room));
848+
data.put("type", "onSpecificationChanged");
849+
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
850+
}
851+
);
852+
}
853+
854+
@Override
855+
public void onAttributesUpdate(String chatRoomId, Map<String, String> attributeMap, String from) {
856+
EMListenerHandle.getInstance().addHandle(
857+
()-> {
858+
Map<String, Object> data = new HashMap<>();
859+
data.put("roomId", chatRoomId);
860+
data.put("type", "chatroomAttributesDidUpdated");
861+
data.put("attributes", attributeMap);
862+
data.put("fromId", from);
863+
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
864+
}
865+
);
866+
}
867+
868+
@Override
869+
public void onAttributesRemoved(String chatRoomId, List<String> keyList, String from) {
870+
EMListenerHandle.getInstance().addHandle(
871+
() -> {
872+
Map<String, Object> data = new HashMap<>();
873+
data.put("roomId", chatRoomId);
874+
data.put("keys", keyList);
875+
data.put("type", "chatroomAttributesDidRemoved");
876+
data.put("fromId", from);
746877
post(() -> channel.invokeMethod(EMSDKMethod.chatRoomChange, data));
747878
}
748879
);

0 commit comments

Comments
 (0)