123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- package com.cooleshow.chatmodule.ui;
- import android.Manifest;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.os.Parcelable;
- import android.text.TextUtils;
- import android.view.View;
- import android.widget.Button;
- import android.widget.EditText;
- import com.alibaba.android.arouter.facade.annotation.Route;
- import com.alibaba.android.arouter.launcher.ARouter;
- import com.chad.library.adapter.base.BaseQuickAdapter;
- import com.chad.library.adapter.base.listener.OnItemClickListener;
- import com.cooleshow.base.constanst.UploadConstants;
- import com.cooleshow.base.router.RouterPath;
- import com.cooleshow.base.ui.activity.BaseMVPActivity;
- import com.cooleshow.base.utils.ToastUtil;
- import com.cooleshow.base.utils.helper.GlideEngine;
- import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
- import com.cooleshow.base.utils.helper.upload.UploadHelper;
- import com.cooleshow.chatmodule.adapter.AddPhotoListAdapter;
- import com.cooleshow.chatmodule.constants.TCChatRouterPath;
- import com.cooleshow.chatmodule.contract.ImAppealContract;
- import com.cooleshow.chatmodule.databinding.TcActivityImAppealBinding;
- import com.cooleshow.chatmodule.presenter.ImAppealPresenter;
- import com.cooleshow.chatmodule.utils.helper.IMThemManager;
- import com.luck.picture.lib.PictureSelector;
- import com.luck.picture.lib.config.PictureConfig;
- import com.luck.picture.lib.config.PictureMimeType;
- import com.luck.picture.lib.entity.LocalMedia;
- import com.tbruyelle.rxpermissions3.RxPermissions;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.List;
- import androidx.annotation.NonNull;
- import androidx.annotation.Nullable;
- import androidx.recyclerview.widget.GridLayoutManager;
- import androidx.recyclerview.widget.RecyclerView;
- /**
- * 创建日期:2022/6/13 13:54
- *
- * @author Ryan
- * 类说明:
- */
- @Route(path = TCChatRouterPath.CHAT_IM_APPEAL)
- public class ImAppealActivity extends BaseMVPActivity<TcActivityImAppealBinding, ImAppealPresenter> implements ImAppealContract.ImAppealView {
- private EditText et_content;
- private Button btn_commit;
- private RecyclerView recyclerView;
- private int maxSelectNum = 3;
- private AddPhotoListAdapter addPhotoListAdapter;
- List<LocalMedia> selectList = new ArrayList<>();
- List<String> urlList = new ArrayList<>();
- private String targetId;
- private String name;
- private String type;
- private String memo;
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- QMUIStatusBarHelper.setStatusBarLightMode(this);
- }
- @Override
- protected void initView() {
- initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "投诉");
- IMThemManager.getInstance().setMainButtonStyles(viewBinding.btnCommit);
- IMThemManager.getInstance().setEditStyle(viewBinding.etContent);
- Intent intent = getIntent();
- targetId = intent.getStringExtra("targetId");
- name = intent.getStringExtra("name");
- type = intent.getStringExtra("type");
- et_content = viewBinding.etContent;
- btn_commit = viewBinding.btnCommit;
- IMThemManager.getInstance().setMainButtonStyles(btn_commit);
- recyclerView = viewBinding.recyclerView;
- GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
- recyclerView.setLayoutManager(gridLayoutManager);
- addNewEmpty();
- addPhotoListAdapter = new AddPhotoListAdapter(selectList);
- recyclerView.setAdapter(addPhotoListAdapter);
- addPhotoListAdapter.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
- LocalMedia item = (LocalMedia) adapter.getItem(position);
- if (item.getPath().equals("123")) {
- toSelectPic();
- } else {
- ARouter.getInstance().build(TCChatRouterPath.CHAT_PHOTO_PREVIEW)
- .withInt("position", position)
- .withParcelableArrayList("list", (ArrayList<? extends Parcelable>) selectList)
- .navigation(ImAppealActivity.this, 100);
- }
- }
- });
- btn_commit.setOnClickListener(view -> {
- if (null == selectList || selectList.size() <= 0) {
- ToastUtil.getInstance().showShort("请选择聊天截图");
- return;
- }
- memo = et_content.getText().toString().trim();
- if (TextUtils.isEmpty(memo)) {
- ToastUtil.getInstance().showShort("请输入投诉的理由");
- return;
- }
- int enableSelectSize = getSelectSize();
- for (int i = 0; i < selectList.size(); i++) {
- String compressPath = selectList.get(i).getCompressPath();
- if (!TextUtils.isEmpty(compressPath)) {
- upLoadVideo(this, compressPath, enableSelectSize);
- }
- }
- });
- }
- private void toSelectPic() {
- new RxPermissions(this)
- .request(Manifest.permission.CAMERA,
- Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE)
- .subscribe(granted -> {
- if (granted) {
- goAlbum();
- } else {
- ToastUtil.getInstance().show(this, "请打开存储和相机权限!");
- }
- });
- }
- private void goAlbum() {
- PictureSelector.create(ImAppealActivity.this)
- .openGallery(PictureMimeType.ofImage())//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
- .loadImageEngine(GlideEngine.createGlideEngine())
- .theme(com.cooleshow.base.R.style.picture_daya_style)// 主题样式设置 具体参考 values/styles 用法:R.style.picture.white.style
- .selectionMode(PictureConfig.MULTIPLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
- .maxSelectNum(maxSelectNum + 1 - selectList.size())
- .compress(true)// 是否压缩 true or false
- .forResult(PictureConfig.CHOOSE_REQUEST);
- }
- private void addNewEmpty() {
- if (hasEmpty()) {
- return;
- }
- LocalMedia localMedia = new LocalMedia();
- localMedia.setPath("123");
- selectList.add(localMedia);
- }
- public void upLoadVideo(Activity activity, String filePath, int enableSelectSize) {
- UploadHelper uploadHelper = new UploadHelper(activity, UploadConstants.UPLOAD_TYPE_IM);
- uploadHelper.uploadFile(new File(filePath));
- uploadHelper.setUpLoadCallBack(new UploadHelper.UpLoadCallBack() {
- @Override
- public void onSuccess(String url) {
- urlList.add(url);
- if (urlList.size() == enableSelectSize) {
- StringBuilder stringBuilder = new StringBuilder();
- for (int i = 0; i < urlList.size(); i++) {
- stringBuilder.append(urlList.get(i));
- if (i != urlList.size() - 1) {
- stringBuilder.append(",");
- }
- }
- urlList.clear();
- presenter.sysImComplaint(memo, targetId, type, stringBuilder.toString());
- }
- }
- @Override
- public void onFailure() {
- }
- });
- }
- public int getSelectSize() {
- int count = 0;
- for (int i = 0; i < selectList.size(); i++) {
- LocalMedia localMedia = selectList.get(i);
- if (!TextUtils.isEmpty(localMedia.getCompressPath())) {
- count++;
- }
- }
- return count;
- }
- @Override
- protected TcActivityImAppealBinding getLayoutView() {
- return TcActivityImAppealBinding.inflate(getLayoutInflater());
- }
- @Override
- protected ImAppealPresenter createPresenter() {
- return new ImAppealPresenter();
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == RESULT_OK) {
- switch (requestCode) {
- case PictureConfig.CHOOSE_REQUEST:
- // 图片、视频、音频选择结果回调
- List<LocalMedia> list = PictureSelector.obtainMultipleResult(data);
- selectList.addAll(0, list);
- if (selectList.size() > maxSelectNum) {
- selectList.remove(maxSelectNum);
- }
- addPhotoListAdapter.notifyDataSetChanged();
- // 例如 LocalMedia 里面返回三种path
- // 1.media.getPath(); 为原图path
- // 2.media.getCutPath();为裁剪后path,需判断media.isCut();是否为true 注意:音视频除外
- // 3.media.getCompressPath();为压缩后path,需判断media.isCompressed();是否为true 注意:音视频除外
- // 如果裁剪并压缩了,以取压缩路径为准,因为是先裁剪后压缩的
- // GlideImageLoaderUtils.getInstance().loadCircleImage(this,selectList.get(0).getCutPath(),ivPortrait);
- break;
- case 100:
- // 图片、视频、音频选择结果回调
- List<LocalMedia> list1 = data.getParcelableArrayListExtra("list");
- selectList.clear();
- selectList.addAll(list1);
- if (selectList.size() < maxSelectNum) {
- addNewEmpty();
- }
- addPhotoListAdapter.notifyDataSetChanged();
- break;
- }
- }
- }
- private boolean hasEmpty() {
- for (int i = 0; i < selectList.size(); i++) {
- LocalMedia localMedia = selectList.get(i);
- if (TextUtils.equals(localMedia.getPath(), "123")) {
- return true;
- }
- }
- return false;
- }
- @Override
- public void sysImComplaintSuccess() {
- ToastUtil.getInstance().showShort("已收到您的投诉,我们会认真审核并处理");
- finish();
- }
- }
|