2626import java .io .FileNotFoundException ;
2727import java .util .ArrayList ;
2828import java .util .Collections ;
29+ import java .util .HashMap ;
2930import java .util .HashSet ;
3031import java .util .List ;
3132import java .util .Set ;
5960import cn .jpush .im .android .api .event .ChatRoomMessageEvent ;
6061import cn .jpush .im .android .api .event .ContactNotifyEvent ;
6162import 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 ;
6266import cn .jpush .im .android .api .event .LoginStateChangeEvent ;
6367import cn .jpush .im .android .api .event .MessageEvent ;
6468import cn .jpush .im .android .api .event .MessageRetractEvent ;
6569import cn .jpush .im .android .api .event .NotificationClickEvent ;
6670import cn .jpush .im .android .api .event .OfflineMessageEvent ;
6771import cn .jpush .im .android .api .model .ChatRoomInfo ;
6872import cn .jpush .im .android .api .model .Conversation ;
73+ import cn .jpush .im .android .api .model .GroupBasicInfo ;
6974import cn .jpush .im .android .api .model .GroupInfo ;
7075import cn .jpush .im .android .api .model .Message ;
7176import 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