Browse Source

修改群设置相关样式以及入群申请页面

Pq 1 year ago
parent
commit
c90cec5d08
20 changed files with 716 additions and 81 deletions
  1. 7 0
      chatModule/src/main/AndroidManifest.xml
  2. 61 0
      chatModule/src/main/java/com/cooleshow/chatmodule/adapter/JoinGroupApplyAdapter.java
  3. 22 1
      chatModule/src/main/java/com/cooleshow/chatmodule/api/IMApi.java
  4. 120 0
      chatModule/src/main/java/com/cooleshow/chatmodule/bean/GroupApplyBean.java
  5. 12 12
      chatModule/src/main/java/com/cooleshow/chatmodule/constants/TCChatRouterPath.java
  6. 5 1
      chatModule/src/main/java/com/cooleshow/chatmodule/contract/ChatGroupSettingContract.java
  7. 23 0
      chatModule/src/main/java/com/cooleshow/chatmodule/contract/JoinGroupApplyContract.java
  8. 7 0
      chatModule/src/main/java/com/cooleshow/chatmodule/manager/IMCenter.java
  9. 27 33
      chatModule/src/main/java/com/cooleshow/chatmodule/presenter/ChatGroupSettingPresenter.java
  10. 77 0
      chatModule/src/main/java/com/cooleshow/chatmodule/presenter/JoinGroupApplyPresenter.java
  11. 43 30
      chatModule/src/main/java/com/cooleshow/chatmodule/ui/ChatGroupSettingActivity.java
  12. 164 0
      chatModule/src/main/java/com/cooleshow/chatmodule/ui/JoinGroupApplyActivity.java
  13. 1 1
      chatModule/src/main/java/com/cooleshow/chatmodule/utils/helper/ChatGroupHelper.java
  14. BIN
      chatModule/src/main/res/drawable-xhdpi/icon_item_normal.png
  15. BIN
      chatModule/src/main/res/drawable-xhdpi/icon_item_select.png
  16. BIN
      chatModule/src/main/res/drawable-xxhdpi/icon_item_normal.png
  17. BIN
      chatModule/src/main/res/drawable-xxhdpi/icon_item_select.png
  18. 65 0
      chatModule/src/main/res/layout/activity_join_group_apply.xml
  19. 77 0
      chatModule/src/main/res/layout/layout_join_group_item.xml
  20. 5 3
      chatModule/src/main/res/layout/tc_activity_chat_group_setting.xml

+ 7 - 0
chatModule/src/main/AndroidManifest.xml

@@ -33,11 +33,18 @@
             android:configChanges="orientation|screenSize|keyboardHidden|fontScale|smallestScreenSize|screenLayout"
             android:screenOrientation="portrait" />
 
+        <activity
+            android:name=".ui.JoinGroupApplyActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:screenOrientation="portrait" />
+
         <provider
             android:name=".widget.CustomChatGroupTopRightIconExtension"
             android:authorities="${applicationId}.TUIGroup.ClassicUI.Init"
             android:enabled="true"
             android:exported="false" />
 
+
+
     </application>
 </manifest>

+ 61 - 0
chatModule/src/main/java/com/cooleshow/chatmodule/adapter/JoinGroupApplyAdapter.java

@@ -0,0 +1,61 @@
+package com.cooleshow.chatmodule.adapter;
+
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.base.utils.GlideUtils;
+import com.cooleshow.chatmodule.R;
+import com.cooleshow.chatmodule.bean.GroupApplyBean;
+
+import java.util.List;
+
+/**
+ * 创建日期:2022/6/13 17:20
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class JoinGroupApplyAdapter extends BaseQuickAdapter<GroupApplyBean, BaseViewHolder> {
+
+    public JoinGroupApplyAdapter(List<GroupApplyBean> data) {
+        super(R.layout.layout_join_group_item, data);
+    }
+
+    private boolean isSelect;
+
+    public void setSelect(boolean select) {
+        isSelect = select;
+    }
+
+    public boolean isSelect() {
+        return isSelect;
+    }
+
+    @Override
+    protected void convert(BaseViewHolder helper, GroupApplyBean item) {
+        ImageView im_check = helper.getView(R.id.im_check);
+        ImageView im_header = helper.getView(R.id.im_header);
+        TextView tv_name = helper.getView(R.id.tv_name);
+        TextView tv_content = helper.getView(R.id.tv_content);
+        TextView tv_date = helper.getView(R.id.tv_date);
+        if (isSelect) {
+            im_check.setVisibility(View.VISIBLE);
+            if (item.isSelect()) {
+                im_check.setBackgroundResource(R.drawable.icon_item_select);
+            } else {
+                im_check.setBackgroundResource(R.drawable.icon_item_normal);
+            }
+        } else {
+            im_check.setVisibility(View.GONE);
+        }
+
+        tv_name.setText(item.getUsername());
+        GlideUtils.INSTANCE.loadImage(getContext(),item.getAvatar(),im_header,R.drawable.tc_icon_teacher_default_head);
+        tv_content.setText(item.getDesc());
+        tv_date.setText(item.getCreateTime());
+    }
+
+}

+ 22 - 1
chatModule/src/main/java/com/cooleshow/chatmodule/api/IMApi.java

@@ -4,6 +4,7 @@ import com.cooleshow.base.common.BaseConstant;
 import com.cooleshow.base.data.net.BaseResponse;
 import com.cooleshow.chatmodule.bean.ContactListBean;
 import com.cooleshow.chatmodule.bean.ContactRoomListBean;
+import com.cooleshow.chatmodule.bean.GroupApplyBean;
 import com.cooleshow.chatmodule.bean.GroupMemberBean;
 import com.cooleshow.chatmodule.bean.GroupNoticeBean;
 import com.cooleshow.chatmodule.bean.IMGroupInfo;
@@ -19,6 +20,8 @@ import retrofit2.http.GET;
 import retrofit2.http.POST;
 import retrofit2.http.Path;
 
+import static com.cooleshow.base.common.BaseConstant.TEACHER_GROUP;
+
 /**
  * Author by pq, Date on 2023/6/25.
  */
@@ -48,7 +51,7 @@ public interface IMApi {
      *
      * @returnClassListAdapter
      */
-    @GET("{group_name}" + "/imGroup/getDetail/{groupId}")
+    @POST("{group_name}" + "/imGroup/getDetail/{groupId}")
     Observable<BaseResponse<IMGroupInfo>> queryGroupDetail(@Path("groupId") String groupId,@Path("group_name")String group_name);
 
     /**
@@ -118,4 +121,22 @@ public interface IMApi {
      */
     @POST("{group_name}" + "/imUserFriend/queryAll")
     Observable<BaseResponse<List<ContactListBean>>> queryFriendList(@Body RequestBody requestBody,@Path("group_name") String group_name);
+
+    /**
+     * 申请入群列表
+     *
+     * @param body
+     * @return
+     */
+    @POST("{group_name}" + "/imGroupMemberAudit/queryAll")
+    Observable<BaseResponse<List<GroupApplyBean>>> groupApplyList(@Body RequestBody body,@Path("group_name")String group_name);
+
+    /**
+     * 申请入群批量审核
+     *
+     * @param body
+     * @return
+     */
+    @POST("{group_name}" + "/imGroupMemberAudit/applyAudit")
+    Observable<BaseResponse<Object>> doGroupApply(@Body RequestBody body,@Path("group_name")String group_name);
 }

+ 120 - 0
chatModule/src/main/java/com/cooleshow/chatmodule/bean/GroupApplyBean.java

@@ -0,0 +1,120 @@
+package com.cooleshow.chatmodule.bean;
+
+/**
+ * 创建日期:2022/6/13 17:39
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class GroupApplyBean {
+    /**
+     * "auditStatus": "",
+     * "createTime": "",
+     * "desc": "",
+     * "groupId": "",
+     * "id": 0,
+     * "roleType": "",
+     * "updateTime": "",
+     * "userId": 0
+     */
+    private String auditStatus;
+    private String createTime;
+    private String desc;
+    private String groupId;
+    private long id;
+    private String roleType;
+    private String updateTime;
+    private String username;
+    private String avatar;
+    private String userId;
+    private boolean isSelect;
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+
+    public String getAuditStatus() {
+        return auditStatus;
+    }
+
+    public void setAuditStatus(String auditStatus) {
+        this.auditStatus = auditStatus;
+    }
+
+    public String getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getRoleType() {
+        return roleType;
+    }
+
+    public void setRoleType(String roleType) {
+        this.roleType = roleType;
+    }
+
+    public String getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(String updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public boolean isSelect() {
+        return isSelect;
+    }
+
+    public void setSelect(boolean select) {
+        isSelect = select;
+    }
+}

+ 12 - 12
chatModule/src/main/java/com/cooleshow/chatmodule/constants/TCChatRouterPath.java

@@ -4,16 +4,16 @@ package com.cooleshow.chatmodule.constants;
  * Author by pq, Date on 2023/8/10.
  */
 public class TCChatRouterPath {
-            public final static String  CHAT_SELECT_SCORE = "/tc/activity/SelectScoreChatActivity";
-            public final static String  CHAT_CREATE_GROUP = "/tc/activity/CreateGroupActivity";
-            public final static String  CHAT_GROUP_SETTING = "/tc/activity/ChatGroupSettingActivity";
-            public final static String CHAT_GROUP_SEARCH_HISTORY="/tc/activity/SearchHistoryMessageActivity";
-            public final static String  CHAT_GROUP_NOTICE = "/tc/activity/NoticeActivity";
-            public final static String  CHAT_GROUP_NOTICE_EDIT = "/tc/activity/NoticeEditActivity";
-            public final static String  CHAT_GROUP_SET_REMARK = "/tc/activity/SetRemarksActivity";
-            public final static String  CHAT_IM_APPEAL = "/tc/activity/ImAppealActivity";
-            public final static String  CHAT_PHOTO_PREVIEW = "/tc/activity/PhotoPreviewActivity";
-            public final static String  CHAT_GROUP_MEMBER = "/tc/activity/GroupMemberActivity";
-            public final static String  CHAT_GROUP_JOIN_APPLY = "/tc/activity/JoinGroupApplyActivity";
-            public final static String  CHAT_SELECT_CONTACT = "/tc/activity/SelectContactActivity";
+    public final static String CHAT_SELECT_SCORE = "/tc/activity/SelectScoreChatActivity";
+    public final static String CHAT_CREATE_GROUP = "/tc/activity/CreateGroupActivity";
+    public final static String CHAT_GROUP_SETTING = "/tc/activity/ChatGroupSettingActivity";
+    public final static String CHAT_GROUP_SEARCH_HISTORY = "/tc/activity/SearchHistoryMessageActivity";
+    public final static String CHAT_GROUP_NOTICE = "/tc/activity/NoticeActivity";
+    public final static String CHAT_GROUP_NOTICE_EDIT = "/tc/activity/NoticeEditActivity";
+    public final static String CHAT_GROUP_SET_REMARK = "/tc/activity/SetRemarksActivity";
+    public final static String CHAT_IM_APPEAL = "/tc/activity/ImAppealActivity";
+    public final static String CHAT_PHOTO_PREVIEW = "/tc/activity/PhotoPreviewActivity";
+    public final static String CHAT_GROUP_MEMBER = "/tc/activity/GroupMemberActivity";
+    public final static String CHAT_GROUP_JOIN_APPLY = "/tc/activity/JoinGroupApplyActivity";
+    public final static String CHAT_SELECT_CONTACT = "/tc/activity/SelectContactActivity";
 }

+ 5 - 1
chatModule/src/main/java/com/cooleshow/chatmodule/contract/ChatGroupSettingContract.java

@@ -1,6 +1,7 @@
 package com.cooleshow.chatmodule.contract;
 
 import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.chatmodule.bean.GroupApplyBean;
 import com.cooleshow.chatmodule.bean.GroupMemberBean;
 import com.cooleshow.chatmodule.bean.IMGroupInfo;
 import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
@@ -21,13 +22,16 @@ public interface ChatGroupSettingContract {
 
         void onQueryGroupDetail(IMGroupInfo data);
 
-        void dissolveChatGroupSuccess(String targetId);
+        void dissolveChatGroupSuccess();
 
         void quitChatGroupSuccess();
 
         void getGroupInfoSuccess(GroupInfo data);
 
         void setMessageReceiveOption(boolean b);
+
+        void groupApplyListSuccess(List<GroupApplyBean> data);
+
     }
 
     interface Presenter {

+ 23 - 0
chatModule/src/main/java/com/cooleshow/chatmodule/contract/JoinGroupApplyContract.java

@@ -0,0 +1,23 @@
+package com.cooleshow.chatmodule.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.chatmodule.bean.GroupApplyBean;
+
+import java.util.List;
+
+/**
+ * 创建日期:2022/6/13 16:46
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface JoinGroupApplyContract {
+    interface JoinGroupApplyView extends BaseView {
+        void groupApplyListSuccess(List<GroupApplyBean> data);
+
+        void doGroupApplySuccess();
+    }
+
+    interface Presenter {
+    }
+}

+ 7 - 0
chatModule/src/main/java/com/cooleshow/chatmodule/manager/IMCenter.java

@@ -88,6 +88,13 @@ public class IMCenter {
         });
     }
 
+    public String getConversationIdFromId(String targetId, boolean isGroup) {
+        if (isGroup) {
+            return "group_" + targetId;
+        }
+        return "c2c_" + targetId;
+    }
+
     /**
      * 消息免打扰
      *

+ 27 - 33
chatModule/src/main/java/com/cooleshow/chatmodule/presenter/ChatGroupSettingPresenter.java

@@ -9,6 +9,7 @@ import com.cooleshow.base.rx.BaseObserver;
 import com.cooleshow.base.utils.LogUtils;
 import com.cooleshow.base.utils.RequestBodyUtil;
 import com.cooleshow.chatmodule.api.IMApi;
+import com.cooleshow.chatmodule.bean.GroupApplyBean;
 import com.cooleshow.chatmodule.bean.GroupMemberBean;
 import com.cooleshow.chatmodule.bean.IMGroupInfo;
 import com.cooleshow.chatmodule.contract.ChatGroupSettingContract;
@@ -42,7 +43,7 @@ public class ChatGroupSettingPresenter extends BasePresenter<ChatGroupSettingCon
         mProvider = new GroupInfoProvider();
     }
 
-    public void loadGroup(String groupId){
+    public void loadGroup(String groupId) {
         mProvider.loadGroupInfo(groupId, GroupInfo.GROUP_MEMBER_FILTER_ALL, new IUIKitCallback<GroupInfo>() {
             @Override
             public void onSuccess(GroupInfo data) {
@@ -67,7 +68,7 @@ public class ChatGroupSettingPresenter extends BasePresenter<ChatGroupSettingCon
         } catch (JSONException e) {
             e.printStackTrace();
         }
-        addSubscribe(create(IMApi.class).queryGroupAllMembers(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString()),BaseConstant.CLIENT_API_GROUP_NAME), new BaseObserver<List<GroupMemberBean>>(getView()) {
+        addSubscribe(create(IMApi.class).queryGroupAllMembers(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString()), BaseConstant.CLIENT_API_GROUP_NAME), new BaseObserver<List<GroupMemberBean>>(getView()) {
             @Override
             protected void onSuccess(List<GroupMemberBean> data) {
                 if (getView() != null) {
@@ -79,13 +80,7 @@ public class ChatGroupSettingPresenter extends BasePresenter<ChatGroupSettingCon
 
     //查询群详情
     public void queryGroupDetail(String groupId) {
-        JSONObject jsonObject = new JSONObject();
-        try {
-            jsonObject.put("groupId", groupId);
-        } catch (JSONException e) {
-            e.printStackTrace();
-        }
-        addSubscribe(create(IMApi.class).queryGroupDetail(groupId,BaseConstant.CLIENT_API_GROUP_NAME), new BaseObserver<IMGroupInfo>() {
+        addSubscribe(create(IMApi.class).queryGroupDetail(groupId, BaseConstant.CLIENT_API_GROUP_NAME), new BaseObserver<IMGroupInfo>() {
             @Override
             protected void onSuccess(IMGroupInfo data) {
                 if (isViewAttached()) {
@@ -102,7 +97,7 @@ public class ChatGroupSettingPresenter extends BasePresenter<ChatGroupSettingCon
      * @param groupId
      */
     public void dissolveChatGroup(String groupId) {
-        addSubscribe(create(IMApi.class).dissolveChatGroup(groupId,BaseConstant.CLIENT_API_GROUP_NAME), new BaseObserver<Object>() {
+        addSubscribe(create(IMApi.class).dissolveChatGroup(groupId, BaseConstant.CLIENT_API_GROUP_NAME), new BaseObserver<Object>() {
             @Override
             protected void onSuccess(Object data) {
                 delLocalConversation(groupId);
@@ -121,7 +116,7 @@ public class ChatGroupSettingPresenter extends BasePresenter<ChatGroupSettingCon
      * @param groupId
      */
     public void quitChatGroup(String groupId) {
-        addSubscribe(create(IMApi.class).quitChatGroup(groupId,BaseConstant.CLIENT_API_GROUP_NAME), new BaseObserver<Object>() {
+        addSubscribe(create(IMApi.class).quitChatGroup(groupId, BaseConstant.CLIENT_API_GROUP_NAME), new BaseObserver<Object>() {
             @Override
             protected void onSuccess(Object data) {
                 if (getView() != null) {
@@ -138,6 +133,7 @@ public class ChatGroupSettingPresenter extends BasePresenter<ChatGroupSettingCon
     }
 
     public void delLocalConversationByQuit(String targetId) {
+        targetId = IMCenter.getInstance().getConversationIdFromId(targetId, true);
         IMCenter.getInstance().deleteConversation(targetId, new IUIKitCallback<Void>() {
             @Override
             public void onSuccess(Void data) {
@@ -145,52 +141,50 @@ public class ChatGroupSettingPresenter extends BasePresenter<ChatGroupSettingCon
 
             @Override
             public void onError(int errCode, String errMsg, Void data) {
-                LogUtils.i("pq", "errorMsg:" +errMsg + "\n" + "errorCode:" + errCode);
+                LogUtils.i("pq", "errorMsg:" + errMsg + "\n" + "errorCode:" + errCode);
             }
         });
     }
 
 
     public void delLocalConversation(String targetId) {
+        targetId = IMCenter.getInstance().getConversationIdFromId(targetId, true);
         IMCenter.getInstance().deleteConversation(targetId, new IUIKitCallback<Void>() {
             @Override
             public void onSuccess(Void data) {
                 if (getView() != null) {
-                    getView().dissolveChatGroupSuccess(targetId);
+                    getView().dissolveChatGroupSuccess();
                 }
             }
 
             @Override
             public void onError(int errCode, String errMsg, Void data) {
-                LogUtils.i("pq", "errorMsg:" +errMsg + "\n" + "errorCode:" + errCode);
+                LogUtils.i("pq", "errorMsg:" + errMsg + "\n" + "errorCode:" + errCode);
             }
         });
     }
 
     public void groupApplyList(String groupId) {
-//        if (getView() != null) {
-//            getView().showLoading();
-//        }
-//        JSONObject jsonObject = new JSONObject();
-//        try {
-//            jsonObject.putOpt("auditStatus", "AUDITING");
-//            jsonObject.putOpt("groupId", groupId);
-//            jsonObject.putOpt("rows", Integer.MAX_VALUE);
-//        } catch (JSONException e) {
-//            e.printStackTrace();
-//        }
-//        addSubscribe(create(IMApi.class).groupApplyList(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString()), BaseConstant.CLIENT_API_GROUP_NAME), new BaseObserver<GroupApplyBean>(getView()) {
-//            @Override
-//            protected void onSuccess(GroupApplyBean data) {
-//                if (getView() != null) {
-//                    getView().groupApplyListSuccess(data);
-//                }
-//            }
-//        });
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("auditStatus", "AUDITING");
+            jsonObject.putOpt("groupId", groupId);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(IMApi.class).groupApplyList(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString()),BaseConstant.CLIENT_API_GROUP_NAME), new BaseObserver<List<GroupApplyBean>>(getView()) {
+            @Override
+            protected void onSuccess(List<GroupApplyBean> data) {
+                if (getView() != null) {
+                    getView().groupApplyListSuccess(data);
+                }
+            }
+        });
     }
 
     /**
      * 群消息免打扰
+     *
      * @param targetId
      * @param isChecked
      * @param callback

+ 77 - 0
chatModule/src/main/java/com/cooleshow/chatmodule/presenter/JoinGroupApplyPresenter.java

@@ -0,0 +1,77 @@
+package com.cooleshow.chatmodule.presenter;
+
+import com.cooleshow.base.common.BaseConstant;
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.base.utils.RequestBodyUtil;
+import com.cooleshow.chatmodule.api.IMApi;
+import com.cooleshow.chatmodule.bean.GroupApplyBean;
+import com.cooleshow.chatmodule.contract.JoinGroupApplyContract;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.List;
+
+/**
+ * 创建日期:2022/6/13 16:45
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class JoinGroupApplyPresenter extends BasePresenter<JoinGroupApplyContract.JoinGroupApplyView> implements JoinGroupApplyContract.Presenter {
+
+    public void groupApplyList(String groupId){
+        if (getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("auditStatus", "AUDITING");
+            jsonObject.putOpt("groupId", groupId);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(IMApi.class).groupApplyList(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString()), BaseConstant.CLIENT_API_GROUP_NAME), new BaseObserver<List<GroupApplyBean>>(getView()) {
+            @Override
+            protected void onSuccess(List<GroupApplyBean> data) {
+                if (getView() != null) {
+                    getView().groupApplyListSuccess(data);
+                }
+            }
+
+            @Override
+            public void onComplete() {
+                super.onComplete();
+                if (getView() != null) {
+                    getView().hideLoading();
+                }
+            }
+        });
+    }
+
+    public void doGroupApply(String auditIds,String auditStatus,String groupId){
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("auditIds", auditIds);
+            jsonObject.putOpt("auditStatus", auditStatus);
+            jsonObject.putOpt("groupId", groupId);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(IMApi.class).doGroupApply(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString()),BaseConstant.CLIENT_API_GROUP_NAME), new BaseObserver<Object>(getView()) {
+            @Override
+            protected void onSuccess(Object data) {
+                if (getView() != null) {
+                    getView().doGroupApplySuccess();
+                }
+            }
+
+            @Override
+            public void onComplete() {
+                super.onComplete();
+            }
+        });
+    }
+
+}

+ 43 - 30
chatModule/src/main/java/com/cooleshow/chatmodule/ui/ChatGroupSettingActivity.java

@@ -19,6 +19,7 @@ import com.cooleshow.base.common.BaseApplication;
 import com.cooleshow.base.common.BaseConstant;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.GlideUtils;
 import com.cooleshow.base.utils.JumpUtils;
 import com.cooleshow.base.utils.LogUtils;
 import com.cooleshow.base.utils.ToastUtil;
@@ -26,6 +27,7 @@ import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
 import com.cooleshow.base.widgets.dialog.CommonDialog;
 import com.cooleshow.chatmodule.R;
 import com.cooleshow.chatmodule.adapter.GroupSettingMemberAdapter;
+import com.cooleshow.chatmodule.bean.GroupApplyBean;
 import com.cooleshow.chatmodule.bean.GroupMemberBean;
 import com.cooleshow.chatmodule.bean.IMGroupInfo;
 import com.cooleshow.chatmodule.constants.TCChatRouterPath;
@@ -74,9 +76,9 @@ public class ChatGroupSettingActivity extends BaseMVPActivity<TcActivityChatGrou
             }
         } else if (view.getId() == R.id.tv_group_apply_count) {
             //查看入群申请
-//            ARouter.getInstance().build(RouterPath.ChatCenter.CHAT_GROUP_JOIN_APPLY)
-//                    .withString("targetId", targetId)
-//                    .navigation();
+            ARouter.getInstance().build(TCChatRouterPath.CHAT_GROUP_JOIN_APPLY)
+                    .withString("targetId", targetId)
+                    .navigation();
         } else if (view.getId() == R.id.tv_feedback) {
             //反馈
             ARouter.getInstance().build(TCChatRouterPath.CHAT_IM_APPEAL)
@@ -90,17 +92,13 @@ public class ChatGroupSettingActivity extends BaseMVPActivity<TcActivityChatGrou
                     .withString("targetId", targetId)
                     .navigation();
         } else if (view.getId() == R.id.btn_confirm) {
-//            finish();
-//            if (BaseApplication.Companion.isTeacherClient()) {
-//                //老师端解散群组
-//                showConfirmDialog();
-//            } else if (BaseConstant.isStudentClient()) {
-//                //退出群组
-//                showQuitConfirmDialog();
-//            } else {
-            //发消息
-            finish();
-//            }
+            if (BaseApplication.Companion.isTeacherClient()) {
+                //老师端解散群组
+                showConfirmDialog();
+            } else {
+                //发消息
+                finish();
+            }
         }
 
     }
@@ -192,6 +190,14 @@ public class ChatGroupSettingActivity extends BaseMVPActivity<TcActivityChatGrou
         viewBinding.tvFeedback.setOnClickListener(this);
         viewBinding.btnConfirm.setOnClickListener(this);
 
+        if (BaseApplication.Companion.isTeacherClient()) {
+            btnConfirm.setText("解散群组");
+            viewBinding.llChatJoinApply.setVisibility(View.VISIBLE);
+        } else {
+            btnConfirm.setText("发消息");
+            viewBinding.llChatJoinApply.setVisibility(View.GONE);
+        }
+
         LinearLayoutManager manager = new LinearLayoutManager(this);
         manager.setOrientation(LinearLayoutManager.HORIZONTAL);
         recyclerView.setLayoutManager(manager);
@@ -248,6 +254,9 @@ public class ChatGroupSettingActivity extends BaseMVPActivity<TcActivityChatGrou
         super.onResume();
         presenter.queryGroupDetail(targetId);
         presenter.queryGroupMembers(targetId);
+        if (BaseApplication.Companion.isTeacherClient()) {
+            presenter.groupApplyList(targetId);
+        }
     }
 
     @Override
@@ -289,7 +298,11 @@ public class ChatGroupSettingActivity extends BaseMVPActivity<TcActivityChatGrou
     @Override
     public void onQueryGroupDetail(IMGroupInfo data) {
         if (null != data) {
-            iv_portrait.setImageResource(ChatGroupHelper.getChatGroupAvatarFromId(data.getId()));
+            if(!TextUtils.isEmpty(data.getImg())){
+                GlideUtils.INSTANCE.loadImage(this,data.getImg(),iv_portrait);
+            }else{
+                iv_portrait.setImageResource(ChatGroupHelper.getChatGroupAvatarFromId(data.getId()));
+            }
             if (!TextUtils.isEmpty(data.getMemberNum())) {
                 tv_class_num.setVisibility(View.VISIBLE);
                 tv_class_num.setText(data.getMemberNum() + "/500");
@@ -302,25 +315,25 @@ public class ChatGroupSettingActivity extends BaseMVPActivity<TcActivityChatGrou
     }
 
     @Override
-    public void dissolveChatGroupSuccess(String targetId) {
+    public void dissolveChatGroupSuccess() {
         ToastUtil.getInstance().showShort("解散成功");
         JumpUtils.jumpMain(2);
     }
 
-//    @Override
-//    public void groupApplyListSuccess(GroupApplyBean data) {
-//        if (!checkActivityExist()) {
-//            return;
-//        }
-//        if (tv_group_apply_count == null) {
-//            return;
-//        }
-//        if (data != null && data.getRows() != null) {
-//            tv_group_apply_count.setText(data.getRows().size() + "人");
-//        } else {
-//            tv_group_apply_count.setText("0人");
-//        }
-//    }
+    @Override
+    public void groupApplyListSuccess(List<GroupApplyBean> data) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        if (tv_group_apply_count == null) {
+            return;
+        }
+        if (data != null && data.size() > 0) {
+            tv_group_apply_count.setText(data.size() + "人");
+        } else {
+            tv_group_apply_count.setText("0人");
+        }
+    }
 
     @Override
     public void quitChatGroupSuccess() {

+ 164 - 0
chatModule/src/main/java/com/cooleshow/chatmodule/ui/JoinGroupApplyActivity.java

@@ -0,0 +1,164 @@
+package com.cooleshow.chatmodule.ui;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.listener.OnItemClickListener;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
+import com.cooleshow.base.widgets.EmptyViewLayout;
+import com.cooleshow.chatmodule.R;
+import com.cooleshow.chatmodule.adapter.JoinGroupApplyAdapter;
+import com.cooleshow.chatmodule.bean.GroupApplyBean;
+import com.cooleshow.chatmodule.constants.TCChatRouterPath;
+import com.cooleshow.chatmodule.contract.JoinGroupApplyContract;
+import com.cooleshow.chatmodule.databinding.ActivityJoinGroupApplyBinding;
+import com.cooleshow.chatmodule.presenter.JoinGroupApplyPresenter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * 创建日期:2022/6/13 16:44
+ *
+ * @author Ryan
+ * 类说明:
+ */
+@Route(path = TCChatRouterPath.CHAT_GROUP_JOIN_APPLY)
+public class JoinGroupApplyActivity extends BaseMVPActivity<ActivityJoinGroupApplyBinding, JoinGroupApplyPresenter> implements JoinGroupApplyContract.JoinGroupApplyView, View.OnClickListener {
+
+    private JoinGroupApplyAdapter joinGroupApplyAdapter;
+    private List<GroupApplyBean> dataList = new ArrayList<>();
+    private String targetId;
+    private LinearLayout ll_bottom;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        QMUIStatusBarHelper.setStatusBarLightMode(this);
+    }
+
+    @Override
+    protected void initView() {
+        targetId = getIntent().getStringExtra("targetId");
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "入群申请");
+        viewBinding.toolbarInclude.tvRightText.setText("批量操作");
+        viewBinding.toolbarInclude.tvRightText.setVisibility(View.VISIBLE);
+        viewBinding.toolbarInclude.tvRightText.setTextColor(getResources().getColor(com.cooleshow.base.R.color.common_black));
+        viewBinding.toolbarInclude.tvRightText.setOnClickListener(this);
+        ll_bottom = viewBinding.llBottom;
+        viewBinding.tvRefuse.setOnClickListener(this);
+        viewBinding.tvPass.setOnClickListener(this);
+        RecyclerView rvAddress = viewBinding.recyclerView;
+        LinearLayoutManager manager = new LinearLayoutManager(this);
+        rvAddress.setLayoutManager(manager);
+        joinGroupApplyAdapter = new JoinGroupApplyAdapter(dataList);
+        EmptyViewLayout emptyViewLayout = new EmptyViewLayout(this);
+        emptyViewLayout.setContent(com.cooleshow.base.R.drawable.icon_empty_content, "暂无入群申请");
+        joinGroupApplyAdapter.setEmptyView(emptyViewLayout);
+        rvAddress.setAdapter(joinGroupApplyAdapter);
+        joinGroupApplyAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                if (joinGroupApplyAdapter.isSelect()) {
+                    GroupApplyBean item = (GroupApplyBean) adapter.getItem(position);
+                    item.setSelect(!item.isSelect());
+                    joinGroupApplyAdapter.notifyDataSetChanged();
+                }
+            }
+        });
+    }
+
+    @Override
+    public void initData() {
+        super.initData();
+
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        presenter.groupApplyList(targetId);
+    }
+
+    @Override
+    protected ActivityJoinGroupApplyBinding getLayoutView() {
+        return ActivityJoinGroupApplyBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected JoinGroupApplyPresenter createPresenter() {
+        return new JoinGroupApplyPresenter();
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v.getId() == com.cooleshow.base.R.id.tv_right_text) {
+            if (viewBinding.toolbarInclude.tvRightText.getText().toString().equals("批量操作")) {
+                viewBinding.toolbarInclude.tvRightText.setText("完成");
+                joinGroupApplyAdapter.setSelect(true);
+                ll_bottom.setVisibility(View.VISIBLE);
+            } else {
+                viewBinding.toolbarInclude.tvRightText.setText("批量操作");
+                joinGroupApplyAdapter.setSelect(false);
+                ll_bottom.setVisibility(View.GONE);
+            }
+            joinGroupApplyAdapter.notifyDataSetChanged();
+        } else if (v.getId() == R.id.tv_refuse) {
+            //拒绝
+            String auditIds = "";
+            for (GroupApplyBean groupApplyBean : dataList) {
+                if (groupApplyBean.isSelect()) {
+                    auditIds = auditIds + groupApplyBean.getId() + ",";
+                }
+            }
+            if (!TextUtils.isEmpty(auditIds)) {
+                auditIds = auditIds.substring(0, auditIds.length() - 1);
+                presenter.doGroupApply(auditIds, "REJECT", targetId);
+                updateNormalStyle();
+            }
+
+        } else if (v.getId() == R.id.tv_pass) {
+            //同意
+            String auditIds = "";
+            for (GroupApplyBean groupApplyBean : dataList) {
+                if (groupApplyBean.isSelect()) {
+                    auditIds = auditIds + groupApplyBean.getId() + ",";
+                }
+            }
+            if (!TextUtils.isEmpty(auditIds)) {
+                auditIds = auditIds.substring(0, auditIds.length() - 1);
+                presenter.doGroupApply(auditIds, "OPEN", targetId);
+                updateNormalStyle();
+            }
+        }
+    }
+
+    private void updateNormalStyle() {
+        viewBinding.toolbarInclude.tvRightText.setText("批量操作");
+        joinGroupApplyAdapter.setSelect(false);
+        ll_bottom.setVisibility(View.GONE);
+    }
+
+    @Override
+    public void groupApplyListSuccess(List<GroupApplyBean> data) {
+        dataList.clear();
+        dataList.addAll(data);
+        joinGroupApplyAdapter.notifyDataSetChanged();
+    }
+
+    @Override
+    public void doGroupApplySuccess() {
+        presenter.groupApplyList(targetId);
+    }
+}

+ 1 - 1
chatModule/src/main/java/com/cooleshow/chatmodule/utils/helper/ChatGroupHelper.java

@@ -43,7 +43,7 @@ public class ChatGroupHelper {
 //        } else {
 //            return R.drawable.icon_group_course;
 //        }
-        return R.drawable.tc_icon_group_fans;
+        return R.drawable.icon_group_fans;
     }
 
     public static String getGroupUserInfoExtra(boolean isAdmin, String roleType) {

BIN
chatModule/src/main/res/drawable-xhdpi/icon_item_normal.png


BIN
chatModule/src/main/res/drawable-xhdpi/icon_item_select.png


BIN
chatModule/src/main/res/drawable-xxhdpi/icon_item_normal.png


BIN
chatModule/src/main/res/drawable-xxhdpi/icon_item_select.png


+ 65 - 0
chatModule/src/main/res/layout/activity_join_group_apply.xml

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/color_f6f8f9"
+    android:orientation="vertical">
+
+    <include
+        android:id="@+id/toolbar_include"
+        layout="@layout/common_toolbar_layout" />
+
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/recyclerView"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:overScrollMode="never"
+        android:scrollbars="none"
+        app:layout_constraintBottom_toTopOf="@+id/ll_bottom"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/toolbar_include" />
+
+    <LinearLayout
+        android:id="@+id/ll_bottom"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dp_44"
+        android:layout_alignParentBottom="true"
+        android:layout_marginLeft="28dp"
+        android:layout_marginTop="27dp"
+        android:layout_marginRight="28dp"
+        android:layout_marginBottom="48dp"
+        android:orientation="horizontal"
+        android:visibility="gone"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent">
+
+        <TextView
+            android:id="@+id/tv_refuse"
+            android:layout_width="0dp"
+            android:layout_height="@dimen/dp_44"
+            android:layout_marginRight="@dimen/dp_3"
+            android:layout_weight="1"
+            android:background="@drawable/btn_2dc7aa_border"
+            android:gravity="center"
+            android:text="拒绝"
+            android:textColor="@color/color_2dc7aa"
+            android:textSize="@dimen/sp_14" />
+
+        <TextView
+            android:id="@+id/tv_pass"
+            android:layout_width="0dp"
+            android:layout_height="@dimen/dp_44"
+            android:layout_marginLeft="@dimen/dp_3"
+            android:layout_weight="1"
+            android:background="@drawable/btn_primary_default_shape"
+            android:gravity="center"
+            android:text="通过"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_14" />
+    </LinearLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 77 - 0
chatModule/src/main/res/layout/layout_join_group_item.xml

@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_marginTop="10dp"
+    android:layout_height="wrap_content">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dp_76"
+        android:layout_marginLeft="@dimen/dp_14"
+        android:layout_marginRight="@dimen/dp_14"
+        android:layout_marginBottom="@dimen/dp_12"
+        android:background="@drawable/bg_white_10dp">
+
+
+        <ImageView
+            android:id="@+id/im_check"
+            android:layout_width="@dimen/dp_18"
+            android:layout_height="@dimen/dp_18"
+            android:layout_marginLeft="@dimen/dp_11"
+            android:background="@drawable/icon_item_normal"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <com.cooleshow.base.widgets.QMUIRadiusImageView
+            android:id="@+id/im_header"
+            android:layout_width="@dimen/dp_44"
+            android:layout_height="@dimen/dp_44"
+            android:layout_marginLeft="@dimen/dp_14"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintLeft_toRightOf="@+id/im_check"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_goneMarginLeft="@dimen/dp_11"
+            app:qmui_corner_radius="@dimen/dp_6" />
+
+        <TextView
+            android:id="@+id/tv_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="@dimen/dp_9"
+            android:layout_marginTop="@dimen/dp_18"
+            android:textColor="@color/color_1a1a1a"
+            android:textSize="@dimen/sp_16"
+            app:layout_constraintLeft_toRightOf="@+id/im_header"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_content"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            app:layout_constraintTop_toBottomOf="@+id/tv_name"
+            android:layout_marginTop="@dimen/dp_2"
+            android:lines="2"
+            android:ellipsize="end"
+            android:layout_marginLeft="@dimen/dp_9"
+            android:textColor="@color/color_999999"
+            android:textSize="@dimen/sp_14"
+            app:layout_constraintLeft_toRightOf="@+id/im_header"
+            />
+
+
+        <TextView
+            android:id="@+id/tv_date"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginRight="@dimen/dp_11"
+            android:textColor="@color/color_999999"
+            app:layout_constraintRight_toRightOf="parent"
+            android:layout_marginTop="@dimen/dp_19"
+            app:layout_constraintTop_toTopOf="parent"
+            android:textSize="@dimen/sp_14" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</RelativeLayout>

+ 5 - 3
chatModule/src/main/res/layout/tc_activity_chat_group_setting.xml

@@ -24,7 +24,7 @@
 
             <androidx.constraintlayout.widget.ConstraintLayout
                 android:layout_width="match_parent"
-                android:visibility="gone"
+                android:visibility="visible"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="@dimen/dp_15"
                 android:background="@color/white">
@@ -80,7 +80,7 @@
                     android:layout_height="match_parent"
                     android:gravity="center_vertical"
                     android:paddingLeft="@dimen/dp_13"
-                    android:text="群聊成员"
+                    android:text="查看联系人"
                     android:textColor="@color/color_333333"
                     android:textSize="@dimen/sp_16" />
 
@@ -97,11 +97,13 @@
                     android:paddingRight="@dimen/dp_15"
                     android:singleLine="true"
                     android:text=""
-                    android:textColor="@color/color_aaaaaa"
+                    tools:text="查看1名群成员"
+                    android:textColor="@color/color_666666"
                     android:textSize="@dimen/sp_14" />
             </LinearLayout>
 
             <androidx.recyclerview.widget.RecyclerView
+                android:visibility="gone"
                 android:id="@+id/recyclerView"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"