管灌系统巡查员智能手机App
app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java
File was renamed from app/src/main/java/com/dayu/pipirrapp/activity/AddQuestionActivity.java
@@ -4,7 +4,6 @@
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
@@ -26,7 +25,7 @@
import com.dayu.pipirrapp.bean.net.AddIssueRequest;
import com.dayu.pipirrapp.bean.net.InsectionResult;
import com.dayu.pipirrapp.bean.net.UplodFileState;
import com.dayu.pipirrapp.databinding.ActivityAddQuestionBinding;
import com.dayu.pipirrapp.databinding.ActivityAddIssueBinding;
import com.dayu.pipirrapp.fragment.OrderFragment;
import com.dayu.pipirrapp.net.ApiManager;
import com.dayu.pipirrapp.net.BaseResponse;
@@ -35,6 +34,7 @@
import com.dayu.pipirrapp.service.MyLocationService;
import com.dayu.pipirrapp.tool.FullyGridLayoutManager;
import com.dayu.pipirrapp.tool.GlideEngine;
import com.dayu.pipirrapp.tool.ImageFileCompressEngine;
import com.dayu.pipirrapp.utils.CommonKeyName;
import com.dayu.pipirrapp.utils.ToastUtil;
import com.dayu.pipirrapp.view.TitleBar;
@@ -44,28 +44,21 @@
import com.luck.picture.lib.config.PictureMimeType;
import com.luck.picture.lib.config.SelectMimeType;
import com.luck.picture.lib.decoration.GridSpacingItemDecoration;
import com.luck.picture.lib.engine.CompressFileEngine;
import com.luck.picture.lib.engine.ImageEngine;
import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.entity.MediaExtraInfo;
import com.luck.picture.lib.interfaces.OnExternalPreviewEventListener;
import com.luck.picture.lib.interfaces.OnKeyValueResultCallbackListener;
import com.luck.picture.lib.utils.DateUtils;
import com.luck.picture.lib.utils.DensityUtil;
import com.luck.picture.lib.utils.MediaUtils;
import com.luck.picture.lib.utils.PictureFileUtils;
import com.tencent.bugly.crashreport.CrashReport;
import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import top.zibin.luban.CompressionPredicate;
import top.zibin.luban.Luban;
import top.zibin.luban.OnNewCompressListener;
import top.zibin.luban.OnRenameListener;
import retrofit2.Call;
/**
 * AddQuestionActivity -问题上报
@@ -74,10 +67,10 @@
 * @version 1.0
 * @since 2024-12-09
 */
public class AddQuestionActivity extends BaseActivity{
    private String TAG = "AddQuestionActivity";
public class AddIssueActivity extends BaseActivity {
    private final String TAG = "AddQuestionActivity";
    ActivityAddQuestionBinding binding;
    ActivityAddIssueBinding binding;
    RecyclerView mRecyclerView;
    AddPictureAdapter mAdapter;
    int maxSelectNum = 10;//最大照片
@@ -97,17 +90,19 @@
            latLonBean = (LatLonBean) o;
        }
    };
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding=ActivityAddQuestionBinding.inflate(LayoutInflater.from(this));
        binding = ActivityAddIssueBinding.inflate(LayoutInflater.from(this));
        setContentView(binding.getRoot());
        launcherResult = createActivityResultLauncher();
        initView();
        startLocation();
    }
    void initView() {
        new TitleBar(this).setTitleText("处理工单").setLeftIco().setLeftIcoListening(v -> AddQuestionActivity.this.finish());
        new TitleBar(this).setTitleText("上报问题").setLeftIco().setLeftIcoListening(v -> AddIssueActivity.this.finish());
        mRecyclerView = binding.recycler;
        FullyGridLayoutManager manager = new FullyGridLayoutManager(this,
                4, GridLayoutManager.VERTICAL, false);
@@ -126,10 +121,10 @@
            @Override
            public void onItemClick(View v, int position) {
                // 预览图片、视频、音频
                PictureSelector.create(AddQuestionActivity.this)
                PictureSelector.create(AddIssueActivity.this)
                        .openPreview()
                        .setImageEngine(imageEngine)
                        .setExternalPreviewEventListener(new AddQuestionActivity.MyExternalPreviewEventListener())
                        .setExternalPreviewEventListener(new AddIssueActivity.MyExternalPreviewEventListener())
                        .startActivityPreview(position, true, mAdapter.getData());
            }
@@ -137,6 +132,11 @@
            public void openPicture() {
                //添加图片
                mOpenPicture();
            }
            @Override
            public void onDeleteClick(int position) {
                deleteItem(position);
            }
        });
        binding.dealButton.setOnClickListener(v -> {
@@ -152,13 +152,13 @@
                    if (uplodFileStates.size() > 0) {
                        postData();
                    } else {
                        ToastUtil.showToast(AddQuestionActivity.this, "请上传图片");
                        ToastUtil.showToast(AddIssueActivity.this, "请上传图片");
                    }
                } else {
                    ToastUtil.showToast(AddQuestionActivity.this, "图片正在上传请稍后提交");
                    ToastUtil.showToast(AddIssueActivity.this, "图片正在上传请稍后提交");
                }
            } else {
                ToastUtil.showToast(AddQuestionActivity.this, "请输入反馈内容");
                ToastUtil.showToast(AddIssueActivity.this, "请输入反馈内容");
            }
        });
    }
@@ -174,7 +174,7 @@
                .setMaxVideoSelectNum(maxSelectVideoNum)
                .setImageEngine(imageEngine)
                //设置图片压缩
                .setCompressEngine(new AddQuestionActivity.ImageFileCompressEngine())
                .setCompressEngine(new ImageFileCompressEngine())
                .setSelectedData(mAdapter.getData());
        selectionModel.forResult(launcherResult);
@@ -205,6 +205,7 @@
        @Override
        public void onPreviewDelete(int position) {
            deleteItem(position);
            mAdapter.remove(position);
            mAdapter.notifyItemRemoved(position);
        }
@@ -221,10 +222,13 @@
     * @param result
     */
    private void analyticalSelectResults(ArrayList<LocalMedia> result) {
        //获取当前uplodFileStates所有的图片地址
        Set<String> existingPaths = new HashSet<>();
        for (UplodFileState uplodData : uplodFileStates) {
            existingPaths.add(uplodData.getFilePath());
        }
        //获取在PictureSelector的相册时取消选中的图片
        for (LocalMedia media : result) {
            if (media.getWidth() == 0 || media.getHeight() == 0) {
                if (PictureMimeType.isHasImage(media.getMimeType())) {
@@ -254,10 +258,10 @@
            Log.i(TAG, "文件大小: " + PictureFileUtils.formatAccurateUnitFileSize(media.getSize()));
            Log.i(TAG, "文件时长: " + media.getDuration());
            String compressPath = media.getCompressPath();
            //判断是否有这个路径,没有的话上传该图片
            //判断是否有这个路径,没有的话上传该图片并添加uplodFileStates中
            if (!existingPaths.contains(compressPath)) {
                UplodFileState uplodFileState = new UplodFileState();
                uplodFileState.setFilePath(media.getRealPath());
                uplodFileState.setFilePath(compressPath);
                uplodFileStates.add(uplodFileState);
                // 执行上传图片的操作
                uplodeImg(uplodFileState);
@@ -278,52 +282,6 @@
            }
        });
    }
    /**
     * 自定义图片压缩
     */
    private static class ImageFileCompressEngine implements CompressFileEngine {
        @Override
        public void onStartCompress(Context context, ArrayList<Uri> source, OnKeyValueResultCallbackListener call) {
            Luban.with(context).load(source).ignoreBy(100).setRenameListener(new OnRenameListener() {
                @Override
                public String rename(String filePath) {
                    int indexOf = filePath.lastIndexOf(".");
                    String postfix = indexOf != -1 ? filePath.substring(indexOf) : ".jpg";
                    return DateUtils.getCreateFileName("CMP_") + postfix;
                }
            }).filter(new CompressionPredicate() {
                @Override
                public boolean apply(String path) {
                    if (PictureMimeType.isUrlHasImage(path) && !PictureMimeType.isHasHttp(path)) {
                        return true;
                    }
                    return !PictureMimeType.isUrlHasGif(path);
                }
            }).setCompressListener(new OnNewCompressListener() {
                @Override
                public void onStart() {
                }
                @Override
                public void onSuccess(String source, File compressFile) {
                    if (call != null) {
                        call.onCallback(source, compressFile.getAbsolutePath());
                    }
                }
                @Override
                public void onError(String source, Throwable e) {
                    if (call != null) {
                        call.onCallback(source, null);
                    }
                }
            }).launch();
        }
    }
@@ -363,9 +321,9 @@
            public void onNext(BaseResponse<List<InsectionResult>> t) {
                try {
                    if (t.isSuccess()) {
                        ToastUtil.showToastLong(AddQuestionActivity.this, "上报成功");
                        ToastUtil.showToastLong(AddIssueActivity.this, "上报成功");
                        setResult(OrderFragment.RESULT_REFRESH);
                        AddQuestionActivity.this.finish();
                        AddIssueActivity.this.finish();
                    } else {
                    }
@@ -400,5 +358,19 @@
        super.onDestroy();
        LiveEventBus.get(CommonKeyName.locationData).removeObserver(locationObserver);
    }
    /**
     * 预览和图片列表删除图片时处理删除事件
     */
    private void deleteItem(int position) {
        try {
            Call<BaseResponse> mCall = uplodFileStates.get(position).getThisCall();
            if (mCall != null) {
                mCall.cancel();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        uplodFileStates.remove(position);
    }
}