ChatGroupSettingActivity.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. package com.cooleshow.chatmodule.ui;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.text.TextUtils;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.CheckBox;
  9. import android.widget.CompoundButton;
  10. import android.widget.ImageView;
  11. import android.widget.TextView;
  12. import com.alibaba.android.arouter.facade.annotation.Route;
  13. import com.alibaba.android.arouter.launcher.ARouter;
  14. import com.chad.library.adapter.base.BaseQuickAdapter;
  15. import com.chad.library.adapter.base.listener.OnItemClickListener;
  16. import com.cooleshow.base.bean.StudentPageListBean;
  17. import com.cooleshow.base.common.BaseApplication;
  18. import com.cooleshow.base.constanst.StyleConfig;
  19. import com.cooleshow.base.router.RouterPath;
  20. import com.cooleshow.base.ui.activity.BaseMVPActivity;
  21. import com.cooleshow.base.utils.GlideUtils;
  22. import com.cooleshow.base.utils.JumpUtils;
  23. import com.cooleshow.base.utils.LogUtils;
  24. import com.cooleshow.base.utils.ToastUtil;
  25. import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
  26. import com.cooleshow.base.widgets.dialog.CommonConfirmDialog;
  27. import com.cooleshow.base.widgets.dialog.CommonDialog;
  28. import com.cooleshow.chatmodule.R;
  29. import com.cooleshow.chatmodule.adapter.GroupSettingMemberAdapter;
  30. import com.cooleshow.chatmodule.bean.GroupApplyBean;
  31. import com.cooleshow.chatmodule.bean.GroupMemberBean;
  32. import com.cooleshow.chatmodule.bean.IMGroupInfo;
  33. import com.cooleshow.chatmodule.constants.TCChatRouterPath;
  34. import com.cooleshow.chatmodule.contract.ChatGroupSettingContract;
  35. import com.cooleshow.chatmodule.databinding.TcActivityChatGroupSettingBinding;
  36. import com.cooleshow.chatmodule.presenter.ChatGroupSettingPresenter;
  37. import com.cooleshow.chatmodule.utils.helper.ChatGroupHelper;
  38. import com.cooleshow.chatmodule.utils.helper.IMThemManager;
  39. import com.cooleshow.chatmodule.widget.CommonConfirmDialog2;
  40. import com.cooleshow.usercenter.helper.UserHelper;
  41. import com.tencent.qcloud.tuicore.TUICore;
  42. import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
  43. import java.io.Serializable;
  44. import java.util.ArrayList;
  45. import java.util.List;
  46. import androidx.annotation.NonNull;
  47. import androidx.annotation.Nullable;
  48. import androidx.recyclerview.widget.GridLayoutManager;
  49. import androidx.recyclerview.widget.LinearLayoutManager;
  50. import androidx.recyclerview.widget.RecyclerView;
  51. /**
  52. * 创建日期:2022/6/11 14:29
  53. *
  54. * @author Ryan
  55. * 类说明:
  56. */
  57. @Route(path = TCChatRouterPath.CHAT_GROUP_SETTING)
  58. public class ChatGroupSettingActivity extends BaseMVPActivity<TcActivityChatGroupSettingBinding, ChatGroupSettingPresenter> implements ChatGroupSettingContract.ChatGroupSettingView, View.OnClickListener {
  59. private final int REQUEST_GROUP_REMARKS_CODE = 100;
  60. public static final int REQUEST_CODE_SELECT = 10001;
  61. private final int MAX_SHOW_GROUP_MEMBER_COUNT = 5;
  62. private boolean isCanAddMember = false;
  63. private ArrayList<GroupMemberBean> allMemberList;
  64. @Override
  65. public void onClick(View view) {
  66. if (view.getId() == R.id.ll_history_message) {
  67. //查看历史消息内容
  68. TUICore.startActivity("SearchMainActivity", null);
  69. } else if (view.getId() == R.id.tv_group_name_remarks) {
  70. //设置群名称
  71. ARouter.getInstance().build(TCChatRouterPath.CHAT_GROUP_SET_REMARK)
  72. .withString("targetId", targetId)
  73. .withString("remarks", tv_group_name_remarks.getText().toString().trim())
  74. .navigation(this, REQUEST_GROUP_REMARKS_CODE);
  75. } else if (view.getId() == R.id.tv_group_member_list) {
  76. //查看联系人
  77. if (mAdapter != null) {
  78. ARouter.getInstance().build(TCChatRouterPath.CHAT_GROUP_MEMBER)
  79. .withSerializable("list", allMemberList)
  80. .navigation();
  81. }
  82. } else if (view.getId() == R.id.tv_group_apply_count) {
  83. //查看入群申请
  84. ARouter.getInstance().build(TCChatRouterPath.CHAT_GROUP_JOIN_APPLY)
  85. .withString("targetId", targetId)
  86. .navigation();
  87. } else if (view.getId() == R.id.tv_feedback) {
  88. //反馈
  89. ARouter.getInstance().build(TCChatRouterPath.CHAT_IM_APPEAL)
  90. .withString("targetId", targetId)
  91. .withString("name", name)
  92. .withString("type", "GROUP")
  93. .navigation();
  94. } else if (view.getId() == R.id.tv_notice) {
  95. //群公告
  96. ARouter.getInstance().build(TCChatRouterPath.CHAT_GROUP_NOTICE)
  97. .withString("targetId", targetId)
  98. .navigation();
  99. } else if (view.getId() == R.id.btn_confirm) {
  100. if (BaseApplication.Companion.isTeacherClient()) {
  101. //老师端解散群组
  102. showConfirmDialog();
  103. } else {
  104. //发消息
  105. showQuitConfirmDialog();
  106. }
  107. }
  108. }
  109. private void showQuitConfirmDialog() {
  110. CommonConfirmDialog2 commonDialog = new CommonConfirmDialog2(this);
  111. commonDialog.show();
  112. commonDialog.setTitle("退出群聊");
  113. commonDialog.setContent("请确认是否要退出群聊?");
  114. commonDialog.setCancelText("确认");
  115. commonDialog.setCancelBackground(R.drawable.shape_2dc7aa_20dp, com.cooleshow.base.R.color.white);
  116. commonDialog.setConfirmText("取消");
  117. commonDialog.setConfirmBackground(R.drawable.shape_border_dbdbdb_1dp_20dp, com.cooleshow.base.R.color.color_333333);
  118. IMThemManager.getInstance().setTextDrawableStyle1(commonDialog.getTvCancel());
  119. commonDialog.setOnConfirmClickListener(new View.OnClickListener() {
  120. @Override
  121. public void onClick(View v) {
  122. if (commonDialog != null) {
  123. commonDialog.dismiss();
  124. }
  125. }
  126. });
  127. commonDialog.setOnCancelClickListener(new View.OnClickListener() {
  128. @Override
  129. public void onClick(View v) {
  130. if (commonDialog != null) {
  131. commonDialog.dismiss();
  132. }
  133. presenter.quitChatGroup(targetId);
  134. }
  135. });
  136. }
  137. private void showConfirmDialog() {
  138. CommonDialog commonDialog = new CommonDialog(this);
  139. commonDialog.show();
  140. commonDialog.setTitle("提示");
  141. commonDialog.setContent("确认解散群组吗?");
  142. commonDialog.setOnConfirmClickListener(new View.OnClickListener() {
  143. @Override
  144. public void onClick(View v) {
  145. if (commonDialog != null) {
  146. commonDialog.dismiss();
  147. }
  148. presenter.dissolveChatGroup(targetId);
  149. }
  150. });
  151. commonDialog.setOnCancelClickListener(new View.OnClickListener() {
  152. @Override
  153. public void onClick(View v) {
  154. if (commonDialog != null) {
  155. commonDialog.dismiss();
  156. }
  157. }
  158. });
  159. }
  160. private ImageView iv_portrait;
  161. private TextView tv_group_name;
  162. private TextView tv_class_num;
  163. private TextView tv_group_member_list;
  164. private RecyclerView recyclerView;
  165. private TextView tv_group_apply_count;
  166. private TextView tv_group_name_remarks;
  167. private CheckBox cb_message;
  168. GroupSettingMemberAdapter mAdapter;
  169. private GroupInfo mGroupInfo;
  170. @Override
  171. protected void onCreate(@Nullable Bundle savedInstanceState) {
  172. super.onCreate(savedInstanceState);
  173. QMUIStatusBarHelper.setStatusBarLightMode(this);
  174. }
  175. @Override
  176. protected void initView() {
  177. initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "群设置");
  178. iv_portrait = viewBinding.ivPortrait;
  179. tv_group_name = viewBinding.tvGroupName;
  180. tv_class_num = viewBinding.tvClassNum;
  181. tv_group_member_list = viewBinding.tvGroupMemberList;
  182. tv_group_member_list.setOnClickListener(this);
  183. recyclerView = viewBinding.recyclerView;
  184. Button btnConfirm = viewBinding.btnConfirm;
  185. btnConfirm.setText("发消息");
  186. tv_group_apply_count = viewBinding.tvGroupApplyCount;
  187. tv_group_apply_count.setOnClickListener(this);
  188. tv_group_name_remarks = viewBinding.tvGroupNameRemarks;
  189. tv_group_name_remarks.setOnClickListener(this);
  190. viewBinding.llHistoryMessage.setOnClickListener(this);
  191. cb_message = viewBinding.cbMessage;
  192. viewBinding.tvNotice.setOnClickListener(this);
  193. viewBinding.tvFeedback.setOnClickListener(this);
  194. viewBinding.btnConfirm.setOnClickListener(this);
  195. IMThemManager.getInstance().setCheckButtonDrawable(viewBinding.cbMessage);
  196. IMThemManager.getInstance().setMainButtonStyles(viewBinding.btnConfirm);
  197. if (BaseApplication.Companion.isTeacherClient()) {
  198. btnConfirm.setText("解散群组");
  199. viewBinding.tvGroupNameRemarks.setClickable(true);
  200. viewBinding.tvGroupNameRemarks.setCompoundDrawablesWithIntrinsicBounds(0, 0, com.cooleshow.base.R.drawable.icon_arrow_right, 0);
  201. } else {
  202. btnConfirm.setText("退出群聊");
  203. viewBinding.llChatJoinApply.setVisibility(View.GONE);
  204. viewBinding.tvGroupNameRemarks.setClickable(false);
  205. viewBinding.tvGroupNameRemarks.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
  206. }
  207. GridLayoutManager gridLayoutManager = new GridLayoutManager(this, MAX_SHOW_GROUP_MEMBER_COUNT);
  208. recyclerView.setLayoutManager(gridLayoutManager);
  209. mAdapter = new GroupSettingMemberAdapter();
  210. recyclerView.setAdapter(mAdapter);
  211. mAdapter.setOnItemClickListener(new OnItemClickListener() {
  212. @Override
  213. public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
  214. if (position < mAdapter.getData().size()) {
  215. GroupMemberBean rowsBean = mAdapter.getData().get(position);
  216. if (rowsBean.getItemType() == GroupSettingMemberAdapter.ADD_TYPE) {
  217. goSelectContact();
  218. }
  219. }
  220. }
  221. });
  222. }
  223. private String targetId;
  224. private String name;
  225. @Override
  226. public void initData() {
  227. super.initData();
  228. targetId = getIntent().getStringExtra("targetId");
  229. name = getIntent().getStringExtra("name");
  230. if (TextUtils.isEmpty(targetId)) {
  231. finish();
  232. return;
  233. }
  234. presenter.loadGroup(targetId);
  235. // presenter.conversationGet(Conversation.ConversationType.GROUP, targetId);
  236. cb_message.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  237. @Override
  238. public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  239. if (buttonView.isPressed()) {
  240. presenter.setGroupNotDisturb(targetId, isChecked, null);
  241. // if (isChecked) {
  242. // presenter.conversationMute(Conversation.ConversationType.GROUP, targetId, Conversation.ConversationNotificationStatus.DO_NOT_DISTURB);
  243. // } else {
  244. // presenter.conversationGetUnmute(Conversation.ConversationType.GROUP, targetId, Conversation.ConversationNotificationStatus.NOTIFY);
  245. // }
  246. }
  247. }
  248. });
  249. }
  250. @Override
  251. protected void onResume() {
  252. super.onResume();
  253. refresh();
  254. if (BaseApplication.Companion.isTeacherClient()) {
  255. presenter.groupApplyList(targetId);
  256. }
  257. }
  258. private void goSelectContact() {
  259. ARouter.getInstance().build(RouterPath.MineCenter.SELECT_TENANT_MEMBER)
  260. .withSerializable("filterList", allMemberList)
  261. .navigation(this, REQUEST_CODE_SELECT);
  262. }
  263. @Override
  264. protected TcActivityChatGroupSettingBinding getLayoutView() {
  265. return TcActivityChatGroupSettingBinding.inflate(getLayoutInflater());
  266. }
  267. @Override
  268. protected ChatGroupSettingPresenter createPresenter() {
  269. return new ChatGroupSettingPresenter();
  270. }
  271. @Override
  272. public void onConversation(boolean b) {
  273. cb_message.setChecked(b);
  274. }
  275. @Override
  276. public void onGroupUsers(List<GroupMemberBean> data, String groupId) {
  277. if (!checkActivityExist()) {
  278. return;
  279. }
  280. if (mAdapter != null && data != null) {
  281. this.allMemberList = new ArrayList<>(data);
  282. List<GroupMemberBean> result = new ArrayList<>();
  283. for (int i = 0; i < data.size(); i++) {
  284. GroupMemberBean groupMemberBean = data.get(i);
  285. if (groupMemberBean.isAdmin()) {
  286. result.add(0, groupMemberBean);
  287. } else {
  288. result.add(groupMemberBean);
  289. }
  290. }
  291. tv_group_member_list.setText("查看" + result.size() + "名群成员");
  292. int countLimit = isCanAddMember ? MAX_SHOW_GROUP_MEMBER_COUNT - 1 : MAX_SHOW_GROUP_MEMBER_COUNT;
  293. ArrayList<GroupMemberBean> list = new ArrayList();
  294. for (int i = 0; i < result.size(); i++) {
  295. if (list.size() >= countLimit) {
  296. break;
  297. }
  298. list.add(result.get(i));
  299. }
  300. if (isCanAddMember) {
  301. GroupMemberBean addBean = new GroupMemberBean();
  302. addBean.setItemType(GroupSettingMemberAdapter.ADD_TYPE);
  303. list.add(addBean);
  304. }
  305. mAdapter.setNewInstance(list);
  306. }
  307. }
  308. @Override
  309. public void onQueryGroupDetail(IMGroupInfo data) {
  310. if (null != data) {
  311. if (!TextUtils.isEmpty(data.getImg())) {
  312. GlideUtils.INSTANCE.loadImage(this, data.getImg(), iv_portrait);
  313. } else {
  314. iv_portrait.setImageResource(ChatGroupHelper.getChatGroupAvatarFromId(data.getId()));
  315. }
  316. if (!TextUtils.isEmpty(data.getMemberNum())) {
  317. tv_class_num.setVisibility(View.VISIBLE);
  318. tv_class_num.setText(data.getMemberNum() + "/500");
  319. } else {
  320. tv_class_num.setVisibility(View.GONE);
  321. }
  322. tv_group_name.setText(data.getName());
  323. tv_group_name_remarks.setText(data.getName());
  324. checkTeacherCanAddMember(data.getType());
  325. presenter.queryGroupMembers(targetId);
  326. }
  327. }
  328. private void checkTeacherCanAddMember(String type) {
  329. String tenantId = UserHelper.getTenantId();
  330. if (BaseApplication.Companion.isTeacherClient()) {
  331. boolean isOrgGroup = TextUtils.equals(type, CreateGroupActivity.GROUP_TYPE_ORG);
  332. viewBinding.llChatJoinApply.setVisibility(isOrgGroup ? View.GONE : View.VISIBLE);
  333. isCanAddMember = UserHelper.isTenantAccount(tenantId) && isOrgGroup;
  334. }
  335. }
  336. @Override
  337. public void dissolveChatGroupSuccess() {
  338. ToastUtil.getInstance().showShort("解散成功");
  339. JumpUtils.jumpMain(2);
  340. }
  341. @Override
  342. public void groupApplyListSuccess(List<GroupApplyBean> data) {
  343. if (!checkActivityExist()) {
  344. return;
  345. }
  346. if (tv_group_apply_count == null) {
  347. return;
  348. }
  349. if (data != null && data.size() > 0) {
  350. tv_group_apply_count.setText(data.size() + "人");
  351. } else {
  352. tv_group_apply_count.setText("0人");
  353. }
  354. }
  355. @Override
  356. public void quitChatGroupSuccess() {
  357. if (!checkActivityExist()) {
  358. return;
  359. }
  360. ToastUtil.getInstance().showShort("您已退出该群聊");
  361. if (UserHelper.isTenantAccount()) {
  362. JumpUtils.jumpJGMainAndSelectChild(1, 0);
  363. } else {
  364. JumpUtils.jumpMain(2);
  365. }
  366. }
  367. @Override
  368. public void getGroupInfoSuccess(GroupInfo data) {
  369. if (!checkActivityExist()) {
  370. return;
  371. }
  372. mGroupInfo = data;
  373. boolean messageReceiveOption = mGroupInfo.getMessageReceiveOption();
  374. LogUtils.i("消息免打扰模式:" + messageReceiveOption);
  375. viewBinding.cbMessage.setChecked(messageReceiveOption);
  376. }
  377. @Override
  378. public void setMessageReceiveOption(boolean b) {
  379. if (mGroupInfo != null) {
  380. mGroupInfo.setMessageReceiveOption(b);
  381. }
  382. }
  383. @Override
  384. public void addGroupMemberSuccess(Object data) {
  385. if (!checkActivityExist()) {
  386. return;
  387. }
  388. ToastUtil.getInstance().showShort("添加成功");
  389. refresh();
  390. }
  391. private void refresh() {
  392. presenter.queryGroupDetail(targetId);
  393. }
  394. @Override
  395. protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  396. super.onActivityResult(requestCode, resultCode, data);
  397. if (resultCode == Activity.RESULT_OK) {
  398. if (requestCode == REQUEST_GROUP_REMARKS_CODE) {
  399. tv_group_name_remarks.setText(data.getStringExtra("remarks"));
  400. tv_group_name.setText(data.getStringExtra("remarks"));
  401. return;
  402. }
  403. if (requestCode == REQUEST_CODE_SELECT) {
  404. if (data != null) {
  405. ArrayList<StudentPageListBean.RowsBean> selectMembers = data.getParcelableArrayListExtra("result");
  406. if (selectMembers != null && selectMembers.size() > 0) {
  407. ArrayList<String> result = new ArrayList<>();
  408. for (int i = 0; i < selectMembers.size(); i++) {
  409. result.add(selectMembers.get(i).getImUserId());
  410. }
  411. presenter.addGroupMembers(targetId, result);
  412. }
  413. }
  414. }
  415. }
  416. }
  417. }