Skip to content

Commit bdb9936

Browse files
committed
Add new API for group
1 parent 42d3cb0 commit bdb9936

File tree

5 files changed

+324
-26
lines changed

5 files changed

+324
-26
lines changed

android/src/io/jchat/android/Constant.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,4 +121,16 @@ public class Constant {
121121
public static final String EVENTS = "events";
122122
public static final String APPLY_EVENT_ID = "applyEventId";
123123

124+
/**
125+
* GroupMemberInfo
126+
*/
127+
public static final String USER = "user";
128+
public static final String GROUP_NICKNAME = "groupNickname";
129+
public static final String MEMBER_TYPE = "memberType";
130+
public static final String MEMBER_TYPE_OWNER = "owner";
131+
public static final String MEMBER_TYPE_ADMIN = "admin";
132+
public static final String MEMBER_TYPE_ORDINARY = "ordinary";
133+
public static final String JOIN_GROUP_TIME = "joinGroupTime";
134+
public static final String IS_SILENCE = "isSilence";
135+
124136
}

android/src/io/jchat/android/JMessageModule.java

Lines changed: 161 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import android.media.MediaPlayer;
77
import android.net.Uri;
88
import android.text.TextUtils;
9-
import android.util.Log;
109
import android.widget.Toast;
1110

1211
import com.facebook.react.bridge.Arguments;
@@ -25,7 +24,6 @@
2524
import java.io.FileNotFoundException;
2625
import java.util.ArrayList;
2726
import java.util.Collections;
28-
import java.util.HashMap;
2927
import java.util.HashSet;
3028
import java.util.List;
3129
import java.util.Set;
@@ -41,7 +39,6 @@
4139
import cn.jpush.im.android.api.callback.GetGroupIDListCallback;
4240
import cn.jpush.im.android.api.callback.GetGroupInfoCallback;
4341
import cn.jpush.im.android.api.callback.GetGroupInfoListCallback;
44-
import cn.jpush.im.android.api.callback.GetGroupMembersCallback;
4542
import cn.jpush.im.android.api.callback.GetNoDisurbListCallback;
4643
import cn.jpush.im.android.api.callback.GetUserInfoCallback;
4744
import cn.jpush.im.android.api.callback.GetUserInfoListCallback;
@@ -71,11 +68,14 @@
7168
import cn.jpush.im.android.api.model.Conversation;
7269
import cn.jpush.im.android.api.model.GroupBasicInfo;
7370
import cn.jpush.im.android.api.model.GroupInfo;
71+
import cn.jpush.im.android.api.model.GroupMemberInfo;
7472
import cn.jpush.im.android.api.model.Message;
7573
import cn.jpush.im.android.api.model.UserInfo;
7674
import cn.jpush.im.android.api.options.MessageSendingOptions;
7775
import cn.jpush.im.api.BasicCallback;
76+
import io.jchat.android.utils.EventUtils;
7877
import io.jchat.android.utils.JMessageUtils;
78+
import io.jchat.android.utils.Logger;
7979
import io.jchat.android.utils.ResultUtils;
8080

8181
public class JMessageModule extends ReactContextBaseJavaModule {
@@ -105,7 +105,6 @@ public class JMessageModule extends ReactContextBaseJavaModule {
105105

106106
private Context mContext;
107107
private JMessageUtils mJMessageUtils;
108-
public static HashMap<String, GroupApprovalEvent> groupApprovalEventHashMap;
109108

110109
public JMessageModule(ReactApplicationContext reactContext, boolean shutdownToast) {
111110
super(reactContext);
@@ -127,8 +126,6 @@ public boolean canOverrideExistingModule() {
127126
@Override
128127
public void initialize() {
129128
super.initialize();
130-
if(groupApprovalEventHashMap == null)
131-
groupApprovalEventHashMap = new HashMap<>();
132129
}
133130

134131
@ReactMethod
@@ -139,7 +136,7 @@ public void setup(ReadableMap map) {
139136
JMessageClient.registerEventReceiver(this);
140137
} catch (Exception e) {
141138
e.printStackTrace();
142-
Log.d(TAG, "Parameter invalid, please check again");
139+
Logger.d(TAG, "Parameter invalid, please check again");
143140
}
144141
}
145142

@@ -148,6 +145,7 @@ public void setDebugMode(ReadableMap map) {
148145
try {
149146
boolean enable = map.getBoolean(Constant.ENABLE);
150147
JMessageClient.setDebugMode(enable);
148+
Logger.SHUTDOWNLOG =!enable;
151149
} catch (Exception e) {
152150
e.printStackTrace();
153151
}
@@ -187,7 +185,7 @@ public void login(ReadableMap map, final Callback success, final Callback fail)
187185
mContext = getCurrentActivity();
188186
String username = map.getString(Constant.USERNAME);
189187
String password = map.getString(Constant.PASSWORD);
190-
Log.i(TAG, "username: " + username + " is logging in");
188+
Logger.i(TAG, "username: " + username + " is logging in");
191189
JMessageClient.login(username, password, new BasicCallback() {
192190
@Override
193191
public void gotResult(int status, String desc) {
@@ -202,7 +200,7 @@ public void userRegister(ReadableMap map, final Callback success, final Callback
202200
mContext = getCurrentActivity();
203201
String username = map.getString(Constant.USERNAME);
204202
String password = map.getString(Constant.PASSWORD);
205-
Log.i(TAG, "username: " + username + " password: " + password);
203+
Logger.i(TAG, "username: " + username + " password: " + password);
206204
if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {
207205
Toast.makeText(mContext, "Username or Password null", Toast.LENGTH_SHORT).show();
208206
} else {
@@ -713,6 +711,23 @@ public void gotResult(int status, String desc, long groupId) {
713711
}
714712
}
715713

714+
@ReactMethod
715+
public void dissolveGroup(final ReadableMap map, final Callback success, final Callback fail) {
716+
try {
717+
long groupId = Long.parseLong(map.getString(Constant.GROUP_ID));
718+
JMessageClient.adminDissolveGroup(groupId, new BasicCallback() {
719+
@Override
720+
public void gotResult(int status, String desc) {
721+
mJMessageUtils.handleCallback(status, desc, success, fail);
722+
}
723+
});
724+
725+
} catch (Exception e) {
726+
e.printStackTrace();
727+
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER, ERR_MSG_PARAMETER);
728+
}
729+
}
730+
716731
@ReactMethod
717732
public void getGroupIds(final Callback success, final Callback fail) {
718733
JMessageClient.getGroupIDList(new GetGroupIDListCallback() {
@@ -851,9 +866,9 @@ public void gotResult(int status, String desc) {
851866
public void getGroupMembers(ReadableMap map, final Callback success, final Callback fail) {
852867
try {
853868
long groupId = Long.parseLong(map.getString(Constant.ID));
854-
JMessageClient.getGroupMembers(groupId, new GetGroupMembersCallback() {
869+
JMessageClient.getGroupMembers(groupId, new RequestCallback<List<GroupMemberInfo>>() {
855870
@Override
856-
public void gotResult(int status, String desc, List<UserInfo> list) {
871+
public void gotResult(int status, String desc, List<GroupMemberInfo> list) {
857872
mJMessageUtils.handleCallbackWithArray(status, desc, success, fail, ResultUtils.toJSArray(list));
858873
}
859874
});
@@ -1483,7 +1498,7 @@ public void setConversationExtras(ReadableMap map, Callback success, Callback fa
14831498
jsonObject.addProperty(key, extraMap.getString(key));
14841499
}
14851500
conversation.updateConversationExtra(jsonObject.toString());
1486-
Log.e("JMessageModule", "extra : " + jsonObject.toString());
1501+
Logger.i("JMessageModule", "extra : " + jsonObject.toString());
14871502
WritableMap result = ResultUtils.toJSObject(conversation);
14881503
mJMessageUtils.handleCallbackWithObject(0, "Set extra succeed", success, fail, result);
14891504
} catch (Exception e) {
@@ -1877,7 +1892,7 @@ public void processApplyJoinGroup(final ReadableMap map, final Callback success,
18771892
final List<GroupApprovalEvent> groupApprovalEventList = new ArrayList<>();
18781893

18791894
for (int i = 0; i < array.size(); i++) {
1880-
GroupApprovalEvent groupApprovalEvent = groupApprovalEventHashMap.get(array.getString(i));
1895+
GroupApprovalEvent groupApprovalEvent = EventUtils.getGroupApprovalEvent(getCurrentActivity(),array.getString(i));
18811896
if (groupApprovalEvent == null) {
18821897
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER,
18831898
ERR_MSG_PARAMETER + ": can't get event through " + array.getString(i));
@@ -1896,13 +1911,14 @@ public void processApplyJoinGroup(final ReadableMap map, final Callback success,
18961911
@Override
18971912
public void gotResult(int status, String desc) {
18981913
mJMessageUtils.handleCallback(status, desc, success, fail);
1914+
EventUtils.removeGroupApprovalEvents(getCurrentActivity(),groupApprovalEventList);
18991915
}
19001916
});
19011917

19021918
} else {
19031919
// 批量处理只有接受,插件做循环单拒绝
19041920
for (int i = 0; i < groupApprovalEventList.size(); i++) {
1905-
GroupApprovalEvent groupApprovalEvent = groupApprovalEventList.get(i);
1921+
final GroupApprovalEvent groupApprovalEvent = groupApprovalEventList.get(i);
19061922
final int finalI = i;
19071923
groupApprovalEvent.refuseGroupApproval(groupApprovalEvent.getFromUsername(),
19081924
groupApprovalEvent.getfromUserAppKey(),
@@ -1914,6 +1930,9 @@ public void gotResult(int status, String desc) {
19141930
if(finalI == groupApprovalEventList.size()-1){
19151931
mJMessageUtils.handleCallback(status, desc, success, fail);
19161932
}
1933+
if(status == 0){
1934+
EventUtils.removeGroupApprovalEvent(getCurrentActivity(),groupApprovalEvent.getEventId()+"");
1935+
}
19171936
}
19181937
});
19191938
}
@@ -1924,25 +1943,141 @@ public void gotResult(int status, String desc) {
19241943
}
19251944
}
19261945

1946+
1947+
19271948
@ReactMethod
1928-
public void dissolveGroup(final ReadableMap map, final Callback success, final Callback fail) {
1949+
public void transferGroupOwner(final ReadableMap map, final Callback success, final Callback fail) {
19291950
try {
19301951
long groupId = Long.parseLong(map.getString(Constant.GROUP_ID));
1931-
JMessageClient.adminDissolveGroup(groupId, new BasicCallback() {
1952+
final String username = map.getString(Constant.USERNAME);
1953+
final String appKey = map.hasKey(Constant.APP_KEY) ? map.getString(Constant.APP_KEY) : "";
1954+
JMessageClient.getGroupInfo(groupId, new GetGroupInfoCallback() {
19321955
@Override
1933-
public void gotResult(int status, String desc) {
1934-
mJMessageUtils.handleCallback(status, desc, success, fail);
1956+
public void gotResult(int status, String desc, GroupInfo groupInfo) {
1957+
if (status == 0) {
1958+
groupInfo.changeGroupAdmin(username, appKey, new BasicCallback() {
1959+
@Override
1960+
public void gotResult(int status, String desc) {
1961+
mJMessageUtils.handleCallback(status, desc, success, fail);
1962+
}
1963+
});
1964+
} else {
1965+
mJMessageUtils.handleError(fail, status, desc);
1966+
}
1967+
}
1968+
});
1969+
} catch (Exception e) {
1970+
e.printStackTrace();
1971+
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER, ERR_MSG_PARAMETER);
1972+
}
1973+
}
1974+
1975+
@ReactMethod
1976+
public void setGroupMemberSilence(final ReadableMap map, final Callback success, final Callback fail) {
1977+
try {
1978+
long groupId = Long.parseLong(map.getString(Constant.GROUP_ID));
1979+
final String username = map.getString(Constant.USERNAME);
1980+
final String appKey = map.hasKey(Constant.APP_KEY) ? map.getString(Constant.APP_KEY) : "";
1981+
final Boolean isSilence =map.getBoolean(Constant.IS_SILENCE);
1982+
JMessageClient.getGroupInfo(groupId, new GetGroupInfoCallback() {
1983+
@Override
1984+
public void gotResult(int status, String desc, GroupInfo groupInfo) {
1985+
if (status == 0) {
1986+
groupInfo.setGroupMemSilence(username, appKey, isSilence, new BasicCallback() {
1987+
@Override
1988+
public void gotResult(int status, String desc) {
1989+
mJMessageUtils.handleCallback(status, desc, success, fail);
1990+
}
1991+
});
1992+
} else {
1993+
mJMessageUtils.handleError(fail, status, desc);
1994+
}
1995+
}
1996+
});
1997+
} catch (Exception e) {
1998+
e.printStackTrace();
1999+
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER, ERR_MSG_PARAMETER);
2000+
}
2001+
}
2002+
2003+
@ReactMethod
2004+
public void isSilenceMember(final ReadableMap map, final Callback success, final Callback fail) {
2005+
try {
2006+
long groupId = Long.parseLong(map.getString(Constant.GROUP_ID));
2007+
final String username = map.getString(Constant.USERNAME);
2008+
final String appKey = map.hasKey(Constant.APP_KEY) ? map.getString(Constant.APP_KEY) : "";
2009+
JMessageClient.getGroupInfo(groupId, new GetGroupInfoCallback() {
2010+
@Override
2011+
public void gotResult(int status, String desc, GroupInfo groupInfo) {
2012+
if (status == 0) {
2013+
boolean isSilence = groupInfo.isKeepSilence(username, appKey);
2014+
WritableMap result = Arguments.createMap();
2015+
result.putBoolean(Constant.IS_SILENCE, isSilence);
2016+
mJMessageUtils.handleCallbackWithObject(status, desc, success, fail, result);
2017+
2018+
} else {
2019+
mJMessageUtils.handleError(fail, status, desc);
2020+
}
2021+
}
2022+
});
2023+
} catch (Exception e) {
2024+
e.printStackTrace();
2025+
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER, ERR_MSG_PARAMETER);
2026+
}
2027+
}
2028+
2029+
@ReactMethod
2030+
public void groupSilenceMembers(final ReadableMap map, final Callback success, final Callback fail) {
2031+
try {
2032+
long groupId = Long.parseLong(map.getString(Constant.GROUP_ID));
2033+
JMessageClient.getGroupInfo(groupId, new GetGroupInfoCallback() {
2034+
@Override
2035+
public void gotResult(int status, String desc, GroupInfo groupInfo) {
2036+
if (status == 0) {
2037+
List<GroupMemberInfo> groupSilenceMemberInfos = groupInfo.getGroupSilenceMemberInfos();
2038+
mJMessageUtils.handleCallbackWithArray(status, desc, success, fail,
2039+
ResultUtils.toJSArray(groupSilenceMemberInfos));
2040+
} else {
2041+
mJMessageUtils.handleError(fail, status, desc);
2042+
}
19352043
}
19362044
});
2045+
} catch (Exception e) {
2046+
e.printStackTrace();
2047+
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER, ERR_MSG_PARAMETER);
2048+
}
2049+
}
19372050

2051+
@ReactMethod
2052+
public void setGroupNickname(final ReadableMap map, final Callback success, final Callback fail) {
2053+
try {
2054+
long groupId = Long.parseLong(map.getString(Constant.GROUP_ID));
2055+
final String username = map.getString(Constant.USERNAME);
2056+
final String appKey = map.hasKey(Constant.APP_KEY) ? map.getString(Constant.APP_KEY) : "";
2057+
final String nickname =map.getString("nickName");
2058+
JMessageClient.getGroupInfo(groupId, new GetGroupInfoCallback() {
2059+
@Override
2060+
public void gotResult(int status, String desc, GroupInfo groupInfo) {
2061+
if (status == 0) {
2062+
groupInfo.setMemNickname(username, appKey, nickname, new BasicCallback() {
2063+
@Override
2064+
public void gotResult(int status, String desc) {
2065+
mJMessageUtils.handleCallback(status, desc, success, fail);
2066+
}
2067+
});
2068+
} else {
2069+
mJMessageUtils.handleError(fail, status, desc);
2070+
}
2071+
}
2072+
});
19382073
} catch (Exception e) {
19392074
e.printStackTrace();
19402075
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER, ERR_MSG_PARAMETER);
19412076
}
19422077
}
19432078

19442079
public void onEvent(LoginStateChangeEvent event) {
1945-
Log.d(TAG, "登录状态改变事件:event = " + event.toString());
2080+
Logger.d(TAG, "登录状态改变事件:event = " + event.toString());
19462081
WritableMap map = Arguments.createMap();
19472082
map.putString(Constant.TYPE, event.getReason().toString());
19482083
getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
@@ -1951,7 +2086,7 @@ public void onEvent(LoginStateChangeEvent event) {
19512086

19522087
public void onEvent(MessageEvent event) {
19532088
Message msg = event.getMessage();
1954-
Log.d(TAG, "收到消息:msg = " + msg.toString());
2089+
Logger.d(TAG, "收到消息:msg = " + msg.toString());
19552090
getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
19562091
.emit(RECEIVE_MSG_EVENT, ResultUtils.toJSObject(msg));
19572092
}
@@ -1971,7 +2106,7 @@ public void onEvent(ConversationRefreshEvent event) {
19712106
}
19722107

19732108
public void onEvent(ContactNotifyEvent event) {
1974-
Log.d(TAG, "ContactNotifyEvent, event: " + event);
2109+
Logger.d(TAG, "ContactNotifyEvent, event: " + event);
19752110
WritableMap map = Arguments.createMap();
19762111
map.putString(Constant.TYPE, event.getType().toString());
19772112
map.putString(Constant.REASON, event.getReason());
@@ -2080,14 +2215,14 @@ public void onComplete(int status, String desc, File file) {
20802215
*/
20812216
public void onEventMainThread(ChatRoomMessageEvent event) {
20822217
List<Message> list = event.getMessages();
2083-
Log.d(TAG, "收到聊天室消息");
2218+
Logger.d(TAG, "收到聊天室消息");
20842219
getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
20852220
.emit(RECEIVE_CHAT_ROOM_MSG_EVENT, ResultUtils.toJSArray(list));
20862221
}
20872222

20882223
public void onEvent(GroupApprovalEvent event) {
2089-
Log.d(TAG, "GroupApprovalEvent, event: " + event);
2090-
groupApprovalEventHashMap.put(event.getEventId() + "", event);
2224+
Logger.d(TAG, "GroupApprovalEvent, event: " + event);
2225+
EventUtils.saveGroupApprovalEvent(getCurrentActivity(),event);
20912226
GroupApprovalEvent.Type type = event.getType();
20922227
final WritableMap map = Arguments.createMap();
20932228
map.putString(Constant.EVENT_ID, event.getEventId() + "");
@@ -2115,7 +2250,7 @@ public void gotResult(int status, String s, List<UserInfo> list) {
21152250
}
21162251

21172252
public void onEvent(GroupApprovedNotificationEvent event) {
2118-
Log.d(TAG, "GroupApprovedNotificationEvent, event: " + event);
2253+
Logger.d(TAG, "GroupApprovedNotificationEvent, event: " + event);
21192254
final WritableMap map = Arguments.createMap();
21202255
map.putBoolean(Constant.IS_AGREE, event.getApprovalResult());
21212256
map.putString(Constant.APPLY_EVENT_ID, event.getApprovalEventID() + "");
@@ -2141,7 +2276,7 @@ public void gotResult(int status, String s, List<UserInfo> list) {
21412276
}
21422277

21432278
public void onEvent(GroupApprovalRefuseEvent event) {
2144-
Log.d(TAG, "GroupApprovalRefuseEvent, event: " + event);
2279+
Logger.d(TAG, "GroupApprovalRefuseEvent, event: " + event);
21452280
final WritableMap map = Arguments.createMap();
21462281
map.putString(Constant.REASON, event.getReason());
21472282
map.putString(Constant.GROUP_ID, event.getGid() + "");

0 commit comments

Comments
 (0)