Skip to content

Commit 5dd369b

Browse files
committed
Add pulic group API
1 parent f4ae608 commit 5dd369b

File tree

5 files changed

+311
-6
lines changed

5 files changed

+311
-6
lines changed
-1.43 MB
Binary file not shown.
1.52 MB
Binary file not shown.

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class Constant {
3636
public static final String SERVER_ID = "serverMessageId";
3737
public static final String MESSAGE_ID = "messageId";
3838
public static final String GROUP_ID = "groupId";
39+
public static final String GROUP_TYPE = "groupType";
3940
public static final String NAME = "name";
4041
public static final String DESC = "desc";
4142
public static final String LEVEL = "level";
@@ -47,6 +48,16 @@ public class Constant {
4748
public static final String LATEST_MESSAGE = "latestMessage";
4849
public static final String UNREAD_COUNT = "unreadCount";
4950
public static final String CONVERSATION_TYPE = "conversationType";
51+
public static final String IS_INITIATIVE_APPLY = "isInitiativeApply";
52+
public static final String SEND_APPLY_USER = "sendApplyUser";
53+
public static final String JOIN_GROUP_USERS = "joinGroupUsers";
54+
public static final String IS_AGREE = "isAgree";
55+
public static final String GROUP_ADMIN = "groupAdmin";
56+
public static final String USERS = "users";
57+
public static final String GROUP_MANAGER = "groupManager";
58+
public static final String START = "start";
59+
public static final String COUNT = "count";
60+
5061

5162
/**
5263
* Message
@@ -94,11 +105,20 @@ public class Constant {
94105
static final String PROGRESS = "progress";
95106
public static final String UNRECEIPT_COUNT = "unreceiptCount";
96107
public static final String IS_DESCEND = "isDescend";
108+
97109
/**
98110
* ChatRoom
99111
*/
100112
public static final String ROOM_ID = "roomId";
101113
public static final String ROOM_IDS = "roomIds";
102114
public static final String ROOM_NAME = "roomName";
103115
public static final String MEMBER_COUNT = "memberCount";
116+
/**
117+
* Event
118+
*/
119+
public static final String EVENT_ID = "eventId";
120+
public static final String EVENTS = "events";
121+
public static final String APPLY_EVENT_ID = "applyEventId";
122+
123+
104124
}

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

Lines changed: 272 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.io.FileNotFoundException;
2727
import java.util.ArrayList;
2828
import java.util.Collections;
29+
import java.util.HashMap;
2930
import java.util.HashSet;
3031
import java.util.List;
3132
import java.util.Set;
@@ -59,13 +60,17 @@
5960
import cn.jpush.im.android.api.event.ChatRoomMessageEvent;
6061
import cn.jpush.im.android.api.event.ContactNotifyEvent;
6162
import cn.jpush.im.android.api.event.ConversationRefreshEvent;
63+
import cn.jpush.im.android.api.event.GroupApprovalEvent;
64+
import cn.jpush.im.android.api.event.GroupApprovalRefuseEvent;
65+
import cn.jpush.im.android.api.event.GroupApprovedNotificationEvent;
6266
import cn.jpush.im.android.api.event.LoginStateChangeEvent;
6367
import cn.jpush.im.android.api.event.MessageEvent;
6468
import cn.jpush.im.android.api.event.MessageRetractEvent;
6569
import cn.jpush.im.android.api.event.NotificationClickEvent;
6670
import cn.jpush.im.android.api.event.OfflineMessageEvent;
6771
import cn.jpush.im.android.api.model.ChatRoomInfo;
6872
import cn.jpush.im.android.api.model.Conversation;
73+
import cn.jpush.im.android.api.model.GroupBasicInfo;
6974
import cn.jpush.im.android.api.model.GroupInfo;
7075
import cn.jpush.im.android.api.model.Message;
7176
import cn.jpush.im.android.api.model.UserInfo;
@@ -86,6 +91,10 @@ public class JMessageModule extends ReactContextBaseJavaModule {
8691
private static final String CONTACT_NOTIFY_EVENT = "JMessage.ContactNotify"; // 收到好友请求消息事件
8792
private static final String UPLOAD_PROGRESS_EVENT = "JMessage.UploadProgress"; // 上传(图片,文件等)进度事件
8893
private static final String RECEIVE_CHAT_ROOM_MSG_EVENT = "JMessage.ReceiveChatRoomMsgEvent"; // 收到聊天室消息事件
94+
private static final String RECEIVE_APPLY_JOIN_GROUP_APPROVAL_EVENT = "JMessage.ReceiveApplyJoinGroupApprovalEvent"; // 接收到入群申请
95+
private static final String RECEIVE_GROUP_ADMIN_REJECT_EVENT = "JMessage.ReceiveGroupAdminRejectEvent"; // 接收到管理员拒绝入群申请
96+
private static final String RECEIVE_GROUP_ADMIN_APPROVAL_EVENT = "JMessage.ReceiveGroupAdminApprovalEvent"; // 接收到管理员同意入群申请
97+
8998
private static final int ERR_CODE_PARAMETER = 1;
9099
private static final int ERR_CODE_CONVERSATION = 2;
91100
private static final int ERR_CODE_MESSAGE = 3;
@@ -97,11 +106,13 @@ public class JMessageModule extends ReactContextBaseJavaModule {
97106

98107
private Context mContext;
99108
private JMessageUtils mJMessageUtils;
109+
private HashMap<String,GroupApprovalEvent> groupApprovalEventHashMap ;
100110

101111
public JMessageModule(ReactApplicationContext reactContext, boolean shutdownToast) {
102112
super(reactContext);
103113
mJMessageUtils = new JMessageUtils(reactContext, shutdownToast);
104114
mContext = reactContext;
115+
groupApprovalEventHashMap = new HashMap<>();
105116
}
106117

107118
@Override
@@ -672,12 +683,25 @@ public void createGroup(ReadableMap map, final Callback success, final Callback
672683
try {
673684
String name = map.getString(Constant.NAME);
674685
String desc = map.getString(Constant.DESC);
675-
JMessageClient.createGroup(name, desc, new CreateGroupCallback() {
676-
@Override
677-
public void gotResult(int status, String desc, long groupId) {
678-
mJMessageUtils.handleCallbackWithValue(status, desc, success, fail, String.valueOf(groupId));
679-
}
680-
});
686+
String groupType = map.getString(Constant.GROUP_TYPE);
687+
if(groupType.equals("private")){
688+
JMessageClient.createGroup(name, desc, new CreateGroupCallback() {
689+
@Override
690+
public void gotResult(int status, String desc, long groupId) {
691+
mJMessageUtils.handleCallbackWithValue(status, desc, success, fail, String.valueOf(groupId));
692+
}
693+
});
694+
}else if(groupType.equals("public")){
695+
JMessageClient.createPublicGroup(name, desc, new CreateGroupCallback() {
696+
@Override
697+
public void gotResult(int status, String desc, long groupId) {
698+
mJMessageUtils.handleCallbackWithValue(status, desc, success, fail, String.valueOf(groupId));
699+
}
700+
});
701+
}else {
702+
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER, ERR_MSG_PARAMETER + " : "+groupType);
703+
}
704+
681705
} catch (Exception e) {
682706
e.printStackTrace();
683707
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER, ERR_MSG_PARAMETER);
@@ -1636,6 +1660,175 @@ public void createChatRoomConversation(String roomId, Callback success) {
16361660
success.invoke(ResultUtils.toJSObject(conversation));
16371661
}
16381662

1663+
/**
1664+
* 获取所有回话未读消息总数
1665+
* @param success 成功回调
1666+
*/
1667+
@ReactMethod
1668+
public void getAllUnreadCount(Callback success) {
1669+
WritableMap map = Arguments.createMap();
1670+
int count = JMessageClient.getAllUnReadMsgCount();
1671+
map.putInt("count",count);
1672+
success.invoke(map);
1673+
}
1674+
1675+
1676+
@ReactMethod
1677+
public void addGroupAdmins(final ReadableMap map, final Callback success, final Callback fail) {
1678+
try {
1679+
long groupId = Long.parseLong(map.getString(Constant.GROUP_ID));
1680+
JMessageClient.getGroupInfo(groupId, new GetGroupInfoCallback() {
1681+
@Override
1682+
public void gotResult(int status, String desc, GroupInfo groupInfo) {
1683+
if (status == 0) {
1684+
String appKey = map.hasKey(Constant.APP_KEY) ? map.getString(Constant.APP_KEY) : "";
1685+
ReadableArray array = map.getArray(Constant.USERNAMES);
1686+
final List<UserInfo> userInfos = new ArrayList<>();
1687+
for (int i = 0; i < array.size(); i++) {
1688+
userInfos.add(groupInfo.getGroupMemberInfo(array.getString(i),appKey));
1689+
}
1690+
groupInfo.addGroupKeeper(userInfos, new BasicCallback() {
1691+
@Override
1692+
public void gotResult(int status, String desc) {
1693+
mJMessageUtils.handleCallback(status, desc, success, fail);
1694+
}
1695+
});
1696+
} else {
1697+
mJMessageUtils.handleError(fail, status, desc);
1698+
}
1699+
}
1700+
});
1701+
1702+
} catch (Exception e) {
1703+
e.printStackTrace();
1704+
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER, ERR_MSG_PARAMETER);
1705+
}
1706+
}
1707+
1708+
@ReactMethod
1709+
public void removeGroupAdmins(final ReadableMap map, final Callback success, final Callback fail) {
1710+
try {
1711+
long groupId = Long.parseLong(map.getString(Constant.GROUP_ID));
1712+
JMessageClient.getGroupInfo(groupId, new GetGroupInfoCallback() {
1713+
@Override
1714+
public void gotResult(int status, String desc, GroupInfo groupInfo) {
1715+
if (status == 0) {
1716+
String appKey = map.hasKey(Constant.APP_KEY) ? map.getString(Constant.APP_KEY) : "";
1717+
ReadableArray array = map.getArray(Constant.USERNAMES);
1718+
final List<UserInfo> userInfos = new ArrayList<>();
1719+
for (int i = 0; i < array.size(); i++) {
1720+
userInfos.add(groupInfo.getGroupMemberInfo(array.getString(i),appKey));
1721+
}
1722+
groupInfo.removeGroupKeeper(userInfos, new BasicCallback() {
1723+
@Override
1724+
public void gotResult(int status, String desc) {
1725+
mJMessageUtils.handleCallback(status, desc, success, fail);
1726+
}
1727+
});
1728+
} else {
1729+
mJMessageUtils.handleError(fail, status, desc);
1730+
}
1731+
}
1732+
});
1733+
1734+
} catch (Exception e) {
1735+
e.printStackTrace();
1736+
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER, ERR_MSG_PARAMETER);
1737+
}
1738+
}
1739+
1740+
@ReactMethod
1741+
public void getPublicGroupInfos(final ReadableMap map, final Callback success, final Callback fail) {
1742+
try {
1743+
String appKey = map.hasKey(Constant.APP_KEY) ? map.getString(Constant.APP_KEY) : "";
1744+
int start = Integer.parseInt(map.getString(Constant.START));
1745+
int count = Integer.parseInt(map.getString(Constant.COUNT));
1746+
String reason = map.getString(Constant.REASON);
1747+
JMessageClient.getPublicGroupListByApp(appKey, start, count, new RequestCallback<List<GroupBasicInfo>>() {
1748+
@Override
1749+
public void gotResult(int status, String desc, List<GroupBasicInfo> groupBasicInfos) {
1750+
mJMessageUtils.handleCallbackWithArray(status, desc, success, fail, ResultUtils.toJSArray(groupBasicInfos));
1751+
}
1752+
});
1753+
1754+
} catch (Exception e) {
1755+
e.printStackTrace();
1756+
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER, ERR_MSG_PARAMETER);
1757+
}
1758+
}
1759+
1760+
@ReactMethod
1761+
public void applyJoinGroup(final ReadableMap map, final Callback success, final Callback fail) {
1762+
try {
1763+
long groupId = Long.parseLong(map.getString(Constant.GROUP_ID));
1764+
String reason = map.getString(Constant.REASON);
1765+
JMessageClient.applyJoinGroup(groupId, reason, new BasicCallback() {
1766+
@Override
1767+
public void gotResult(int status, String desc) {
1768+
mJMessageUtils.handleCallback(status, desc, success, fail);
1769+
}
1770+
});
1771+
1772+
} catch (Exception e) {
1773+
e.printStackTrace();
1774+
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER, ERR_MSG_PARAMETER);
1775+
}
1776+
}
1777+
1778+
@ReactMethod
1779+
public void processApplyJoinGroup(final ReadableMap map, final Callback success, final Callback fail) {
1780+
try {
1781+
String appKey = map.hasKey(Constant.APP_KEY) ? map.getString(Constant.APP_KEY) : "";
1782+
String reason = map.getString(Constant.REASON);
1783+
Boolean isAgree =map.getBoolean(Constant.IS_AGREE);
1784+
ReadableArray array = map.getArray(Constant.EVENTS);
1785+
for (int i = 0; i < array.size(); i++) {
1786+
GroupApprovalEvent groupApprovalEvent = groupApprovalEventHashMap.get(array.getString(i));
1787+
if(groupApprovalEvent == null){
1788+
mJMessageUtils.handleError(fail,ERR_CODE_PARAMETER,ERR_MSG_PARAMETER + ": can't get event through " +array.getString(i));
1789+
return;
1790+
}
1791+
if(isAgree){
1792+
groupApprovalEvent.acceptGroupApproval(groupApprovalEvent.getFromUsername(), appKey, new BasicCallback() {
1793+
@Override
1794+
public void gotResult(int status, String desc) {
1795+
mJMessageUtils.handleCallback(status, desc, success, fail);
1796+
}
1797+
});
1798+
1799+
}else {
1800+
groupApprovalEvent.refuseGroupApproval(groupApprovalEvent.getFromUsername(), appKey, reason, new BasicCallback() {
1801+
@Override
1802+
public void gotResult(int status, String desc) {
1803+
mJMessageUtils.handleCallback(status, desc, success, fail);
1804+
}
1805+
});
1806+
}
1807+
1808+
}
1809+
} catch (Exception e) {
1810+
e.printStackTrace();
1811+
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER, ERR_MSG_PARAMETER);
1812+
}
1813+
}
1814+
1815+
@ReactMethod
1816+
public void dissolveGroup(final ReadableMap map, final Callback success, final Callback fail) {
1817+
try {
1818+
long groupId = Long.parseLong(map.getString(Constant.GROUP_ID));
1819+
JMessageClient.adminDissolveGroup(groupId, new BasicCallback() {
1820+
@Override
1821+
public void gotResult(int status, String desc) {
1822+
mJMessageUtils.handleCallback(status, desc, success, fail);
1823+
}
1824+
});
1825+
1826+
} catch (Exception e) {
1827+
e.printStackTrace();
1828+
mJMessageUtils.handleError(fail, ERR_CODE_PARAMETER, ERR_MSG_PARAMETER);
1829+
}
1830+
}
1831+
16391832

16401833

16411834
public void onEvent(LoginStateChangeEvent event) {
@@ -1778,4 +1971,77 @@ public void onEventMainThread(ChatRoomMessageEvent event) {
17781971
getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
17791972
.emit(RECEIVE_MSG_EVENT, ResultUtils.toJSArray(list));
17801973
}
1974+
1975+
1976+
public void onEvent(GroupApprovalEvent event) {
1977+
Log.d(TAG, "GroupApprovalEvent, event: " + event);
1978+
groupApprovalEventHashMap.put(event.getEventId() + "",event);
1979+
GroupApprovalEvent.Type type = event.getType();
1980+
final WritableMap map = Arguments.createMap();
1981+
map.putString(Constant.EVENT_ID, event.getEventId() + "");
1982+
map.putString(Constant.GROUP_ID, event.getGid() + "");
1983+
map.putBoolean(Constant.IS_INITIATIVE_APPLY,type.equals(GroupApprovalEvent.Type.apply_join_group));
1984+
event.getFromUserInfo(new GetUserInfoCallback() {
1985+
@Override
1986+
public void gotResult(int status, String desc, UserInfo userInfo) {
1987+
if(status == 0){
1988+
map.putMap(Constant.SEND_APPLY_USER,ResultUtils.toJSObject(userInfo));
1989+
}
1990+
}
1991+
});
1992+
event.getApprovalUserInfoList(new GetUserInfoListCallback() {
1993+
@Override
1994+
public void gotResult(int status, String s, List<UserInfo> list) {
1995+
if(status == 0){
1996+
map.putArray(Constant.JOIN_GROUP_USERS,ResultUtils.toJSArray(list));
1997+
}
1998+
}
1999+
});
2000+
map.putString(Constant.REASON, event.getReason());
2001+
getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
2002+
.emit(RECEIVE_APPLY_JOIN_GROUP_APPROVAL_EVENT, map);
2003+
}
2004+
2005+
public void onEvent(GroupApprovedNotificationEvent event) {
2006+
Log.d(TAG, "GroupApprovedNotificationEvent, event: " + event);
2007+
final WritableMap map = Arguments.createMap();
2008+
map.putBoolean(Constant.IS_AGREE, event.getApprovalResult());
2009+
map.putString(Constant.APPLY_EVENT_ID, event.getApprovalEventID() + "");
2010+
map.putString(Constant.GROUP_ID, event.getGroupID() + "");
2011+
event.getOperator(new GetUserInfoCallback() {
2012+
@Override
2013+
public void gotResult(int status, String desc, UserInfo userInfo) {
2014+
if(status == 0){
2015+
map.putMap(Constant.GROUP_ADMIN,ResultUtils.toJSObject(userInfo));
2016+
}
2017+
}
2018+
});
2019+
event.getApprovedUserInfoList(new GetUserInfoListCallback() {
2020+
@Override
2021+
public void gotResult(int status, String s, List<UserInfo> list) {
2022+
if(status == 0){
2023+
map.putArray(Constant.USERS,ResultUtils.toJSArray(list));
2024+
}
2025+
}
2026+
});
2027+
getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
2028+
.emit(RECEIVE_GROUP_ADMIN_APPROVAL_EVENT, map);
2029+
}
2030+
2031+
public void onEvent(GroupApprovalRefuseEvent event) {
2032+
Log.d(TAG, "GroupApprovalRefuseEvent, event: " + event);
2033+
final WritableMap map = Arguments.createMap();
2034+
map.putString(Constant.REASON, event.getReason());
2035+
map.putString(Constant.GROUP_ID, event.getGid() + "");
2036+
event.getFromUserInfo(new GetUserInfoCallback() {
2037+
@Override
2038+
public void gotResult(int status, String desc, UserInfo userInfo) {
2039+
if(status == 0){
2040+
map.putMap(Constant.GROUP_MANAGER,ResultUtils.toJSObject(userInfo));
2041+
}
2042+
}
2043+
});
2044+
getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
2045+
.emit(RECEIVE_GROUP_ADMIN_REJECT_EVENT, map);
2046+
}
17812047
}

0 commit comments

Comments
 (0)