ImAppealActivity.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. package com.cooleshow.chatmodule.ui;
  2. import android.Manifest;
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.os.Parcelable;
  7. import android.text.TextUtils;
  8. import android.view.View;
  9. import android.widget.Button;
  10. import android.widget.EditText;
  11. import com.alibaba.android.arouter.facade.annotation.Route;
  12. import com.alibaba.android.arouter.launcher.ARouter;
  13. import com.chad.library.adapter.base.BaseQuickAdapter;
  14. import com.chad.library.adapter.base.listener.OnItemClickListener;
  15. import com.cooleshow.base.constanst.UploadConstants;
  16. import com.cooleshow.base.router.RouterPath;
  17. import com.cooleshow.base.ui.activity.BaseMVPActivity;
  18. import com.cooleshow.base.utils.ToastUtil;
  19. import com.cooleshow.base.utils.helper.GlideEngine;
  20. import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
  21. import com.cooleshow.base.utils.helper.upload.UploadHelper;
  22. import com.cooleshow.chatmodule.adapter.AddPhotoListAdapter;
  23. import com.cooleshow.chatmodule.constants.TCChatRouterPath;
  24. import com.cooleshow.chatmodule.contract.ImAppealContract;
  25. import com.cooleshow.chatmodule.databinding.TcActivityImAppealBinding;
  26. import com.cooleshow.chatmodule.presenter.ImAppealPresenter;
  27. import com.cooleshow.chatmodule.utils.helper.IMThemManager;
  28. import com.luck.picture.lib.PictureSelector;
  29. import com.luck.picture.lib.config.PictureConfig;
  30. import com.luck.picture.lib.config.PictureMimeType;
  31. import com.luck.picture.lib.entity.LocalMedia;
  32. import com.tbruyelle.rxpermissions3.RxPermissions;
  33. import java.io.File;
  34. import java.util.ArrayList;
  35. import java.util.List;
  36. import androidx.annotation.NonNull;
  37. import androidx.annotation.Nullable;
  38. import androidx.recyclerview.widget.GridLayoutManager;
  39. import androidx.recyclerview.widget.RecyclerView;
  40. /**
  41. * 创建日期:2022/6/13 13:54
  42. *
  43. * @author Ryan
  44. * 类说明:
  45. */
  46. @Route(path = TCChatRouterPath.CHAT_IM_APPEAL)
  47. public class ImAppealActivity extends BaseMVPActivity<TcActivityImAppealBinding, ImAppealPresenter> implements ImAppealContract.ImAppealView {
  48. private EditText et_content;
  49. private Button btn_commit;
  50. private RecyclerView recyclerView;
  51. private int maxSelectNum = 3;
  52. private AddPhotoListAdapter addPhotoListAdapter;
  53. List<LocalMedia> selectList = new ArrayList<>();
  54. List<String> urlList = new ArrayList<>();
  55. private String targetId;
  56. private String name;
  57. private String type;
  58. private String memo;
  59. @Override
  60. protected void onCreate(@Nullable Bundle savedInstanceState) {
  61. super.onCreate(savedInstanceState);
  62. QMUIStatusBarHelper.setStatusBarLightMode(this);
  63. }
  64. @Override
  65. protected void initView() {
  66. initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "投诉");
  67. IMThemManager.getInstance().setMainButtonStyles(viewBinding.btnCommit);
  68. IMThemManager.getInstance().setEditStyle(viewBinding.etContent);
  69. Intent intent = getIntent();
  70. targetId = intent.getStringExtra("targetId");
  71. name = intent.getStringExtra("name");
  72. type = intent.getStringExtra("type");
  73. et_content = viewBinding.etContent;
  74. btn_commit = viewBinding.btnCommit;
  75. IMThemManager.getInstance().setMainButtonStyles(btn_commit);
  76. recyclerView = viewBinding.recyclerView;
  77. GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
  78. recyclerView.setLayoutManager(gridLayoutManager);
  79. addNewEmpty();
  80. addPhotoListAdapter = new AddPhotoListAdapter(selectList);
  81. recyclerView.setAdapter(addPhotoListAdapter);
  82. addPhotoListAdapter.setOnItemClickListener(new OnItemClickListener() {
  83. @Override
  84. public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
  85. LocalMedia item = (LocalMedia) adapter.getItem(position);
  86. if (item.getPath().equals("123")) {
  87. toSelectPic();
  88. } else {
  89. ARouter.getInstance().build(TCChatRouterPath.CHAT_PHOTO_PREVIEW)
  90. .withInt("position", position)
  91. .withParcelableArrayList("list", (ArrayList<? extends Parcelable>) selectList)
  92. .navigation(ImAppealActivity.this, 100);
  93. }
  94. }
  95. });
  96. btn_commit.setOnClickListener(view -> {
  97. if (null == selectList || selectList.size() <= 0) {
  98. ToastUtil.getInstance().showShort("请选择聊天截图");
  99. return;
  100. }
  101. memo = et_content.getText().toString().trim();
  102. if (TextUtils.isEmpty(memo)) {
  103. ToastUtil.getInstance().showShort("请输入投诉的理由");
  104. return;
  105. }
  106. int enableSelectSize = getSelectSize();
  107. for (int i = 0; i < selectList.size(); i++) {
  108. String compressPath = selectList.get(i).getCompressPath();
  109. if (!TextUtils.isEmpty(compressPath)) {
  110. upLoadVideo(this, compressPath, enableSelectSize);
  111. }
  112. }
  113. });
  114. }
  115. private void toSelectPic() {
  116. new RxPermissions(this)
  117. .request(Manifest.permission.CAMERA,
  118. Manifest.permission.READ_EXTERNAL_STORAGE,
  119. Manifest.permission.WRITE_EXTERNAL_STORAGE)
  120. .subscribe(granted -> {
  121. if (granted) {
  122. goAlbum();
  123. } else {
  124. ToastUtil.getInstance().show(this, "请打开存储和相机权限!");
  125. }
  126. });
  127. }
  128. private void goAlbum() {
  129. PictureSelector.create(ImAppealActivity.this)
  130. .openGallery(PictureMimeType.ofImage())//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
  131. .loadImageEngine(GlideEngine.createGlideEngine())
  132. .theme(com.cooleshow.base.R.style.picture_daya_style)// 主题样式设置 具体参考 values/styles 用法:R.style.picture.white.style
  133. .selectionMode(PictureConfig.MULTIPLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
  134. .maxSelectNum(maxSelectNum + 1 - selectList.size())
  135. .compress(true)// 是否压缩 true or false
  136. .forResult(PictureConfig.CHOOSE_REQUEST);
  137. }
  138. private void addNewEmpty() {
  139. if (hasEmpty()) {
  140. return;
  141. }
  142. LocalMedia localMedia = new LocalMedia();
  143. localMedia.setPath("123");
  144. selectList.add(localMedia);
  145. }
  146. public void upLoadVideo(Activity activity, String filePath, int enableSelectSize) {
  147. UploadHelper uploadHelper = new UploadHelper(activity, UploadConstants.UPLOAD_TYPE_IM);
  148. uploadHelper.uploadFile(new File(filePath));
  149. uploadHelper.setUpLoadCallBack(new UploadHelper.UpLoadCallBack() {
  150. @Override
  151. public void onSuccess(String url) {
  152. urlList.add(url);
  153. if (urlList.size() == enableSelectSize) {
  154. StringBuilder stringBuilder = new StringBuilder();
  155. for (int i = 0; i < urlList.size(); i++) {
  156. stringBuilder.append(urlList.get(i));
  157. if (i != urlList.size() - 1) {
  158. stringBuilder.append(",");
  159. }
  160. }
  161. urlList.clear();
  162. presenter.sysImComplaint(memo, targetId, type, stringBuilder.toString());
  163. }
  164. }
  165. @Override
  166. public void onFailure() {
  167. }
  168. });
  169. }
  170. public int getSelectSize() {
  171. int count = 0;
  172. for (int i = 0; i < selectList.size(); i++) {
  173. LocalMedia localMedia = selectList.get(i);
  174. if (!TextUtils.isEmpty(localMedia.getCompressPath())) {
  175. count++;
  176. }
  177. }
  178. return count;
  179. }
  180. @Override
  181. protected TcActivityImAppealBinding getLayoutView() {
  182. return TcActivityImAppealBinding.inflate(getLayoutInflater());
  183. }
  184. @Override
  185. protected ImAppealPresenter createPresenter() {
  186. return new ImAppealPresenter();
  187. }
  188. @Override
  189. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  190. super.onActivityResult(requestCode, resultCode, data);
  191. if (resultCode == RESULT_OK) {
  192. switch (requestCode) {
  193. case PictureConfig.CHOOSE_REQUEST:
  194. // 图片、视频、音频选择结果回调
  195. List<LocalMedia> list = PictureSelector.obtainMultipleResult(data);
  196. selectList.addAll(0, list);
  197. if (selectList.size() > maxSelectNum) {
  198. selectList.remove(maxSelectNum);
  199. }
  200. addPhotoListAdapter.notifyDataSetChanged();
  201. // 例如 LocalMedia 里面返回三种path
  202. // 1.media.getPath(); 为原图path
  203. // 2.media.getCutPath();为裁剪后path,需判断media.isCut();是否为true 注意:音视频除外
  204. // 3.media.getCompressPath();为压缩后path,需判断media.isCompressed();是否为true 注意:音视频除外
  205. // 如果裁剪并压缩了,以取压缩路径为准,因为是先裁剪后压缩的
  206. // GlideImageLoaderUtils.getInstance().loadCircleImage(this,selectList.get(0).getCutPath(),ivPortrait);
  207. break;
  208. case 100:
  209. // 图片、视频、音频选择结果回调
  210. List<LocalMedia> list1 = data.getParcelableArrayListExtra("list");
  211. selectList.clear();
  212. selectList.addAll(list1);
  213. if (selectList.size() < maxSelectNum) {
  214. addNewEmpty();
  215. }
  216. addPhotoListAdapter.notifyDataSetChanged();
  217. break;
  218. }
  219. }
  220. }
  221. private boolean hasEmpty() {
  222. for (int i = 0; i < selectList.size(); i++) {
  223. LocalMedia localMedia = selectList.get(i);
  224. if (TextUtils.equals(localMedia.getPath(), "123")) {
  225. return true;
  226. }
  227. }
  228. return false;
  229. }
  230. @Override
  231. public void sysImComplaintSuccess() {
  232. ToastUtil.getInstance().showShort("已收到您的投诉,我们会认真审核并处理");
  233. finish();
  234. }
  235. }