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 implements ImAppealContract.ImAppealView { private EditText et_content; private Button btn_commit; private RecyclerView recyclerView; private int maxSelectNum = 3; private AddPhotoListAdapter addPhotoListAdapter; List selectList = new ArrayList<>(); List 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) 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 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 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(); } }