管灌系统巡查员智能手机App
zuoxiao
2025-01-10 c2c902a3bf998632ffffa9c1508aceba7b5a7b45
1.添加网络视频的显示功能相关
11个文件已修改
2个文件已添加
244 ■■■■ 已修改文件
app/build.gradle 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/activity/IssueDetailActivity.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/adapter/ImageAdapter.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/ImageBean.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/net/AddIssueRequest.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/net/AddProcessingRequest.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/net/DealDetailResult.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/net/IssueResult.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/net/RetrofitClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/play.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_image.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/build.gradle
@@ -12,7 +12,7 @@
        }
    }
    namespace 'com.dayu.pipirrapp'
    compileSdk 33
    compileSdk 34
    defaultConfig {
        applicationId "com.dayu.pipirrapp"
@@ -189,12 +189,14 @@
    implementation 'io.github.lucksiege:compress:v3.11.2'
    //    图片查看
    implementation('com.github.SherlockGougou:BigImageViewPager:androidx-7.2.3') {
    implementation('com.github.SherlockGougou:BigImageViewPager:androidx-8.0.0') {
        exclude group: 'androidx.appcompat';
        exclude group: 'com.google.android.material';
        exclude group: 'androidx.core';
    }
    implementation "androidx.media3:media3-exoplayer:1.4.1"
    implementation "androidx.media3:media3-exoplayer-dash:1.4.1"
    implementation "androidx.media3:media3-ui:1.4.1"
    //进度加载
    implementation 'com.github.jenly1314:circleprogressview:1.1.3'
app/src/main/java/com/dayu/pipirrapp/activity/IssueDetailActivity.java
@@ -13,8 +13,10 @@
import com.dayu.pipirrapp.MyApplication;
import com.dayu.pipirrapp.R;
import com.dayu.pipirrapp.adapter.ImageAdapter;
import com.dayu.pipirrapp.bean.ImageBean;
import com.dayu.pipirrapp.bean.net.ImageResult;
import com.dayu.pipirrapp.bean.net.IssueResult;
import com.dayu.pipirrapp.bean.net.UplodFileState;
import com.dayu.pipirrapp.databinding.ActivityIssueDetailBinding;
import com.dayu.pipirrapp.fragment.OrderFragment;
import com.dayu.pipirrapp.net.ApiManager;
@@ -34,6 +36,8 @@
import java.util.Map;
import cc.shinichi.library.ImagePreview;
import cc.shinichi.library.bean.ImageInfo;
import cc.shinichi.library.bean.Type;
/**
 * IssueDetailActivity - 问题上报详情界面
@@ -47,8 +51,8 @@
    RecyclerView mRecyclerView;
    ActivityIssueDetailBinding binding;
    ImageAdapter mAdapter;
    List<String> imageInfoList = new ArrayList<>();
    List<ImageResult> images = new ArrayList<>();
    List<ImageInfo> imageInfoList = new ArrayList<>();
    List<ImageBean> images = new ArrayList<>();
    int state;
    String issueReportId;
@@ -75,8 +79,7 @@
        // 添加间距装饰,确保图片有合适的间隔
        mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(4, DensityUtil.dip2px(this, 8), false));
        mAdapter = new ImageAdapter(this, images, (v, position) -> {
            ImagePreview.getInstance().setContext(IssueDetailActivity.this).setImageList(imageInfoList).start();
            ImagePreview.getInstance().with(IssueDetailActivity.this).setIndex(position).setMediaInfoList(imageInfoList).start();
        });
        mRecyclerView.setAdapter(mAdapter);
    }
@@ -94,9 +97,31 @@
                            binding.setData(orderDetailResult);
                            binding.setItemclidk(IssueDetailActivity.this);
                            state = orderDetailResult.getStateId();
                            images.addAll(t.getContent().getImages());
                            for (ImageResult imageResult : images) {
                                imageInfoList.add(imageResult.getWebPath());
                            if (!t.getContent().getImages().isEmpty()){
                                for (ImageResult imageResult:t.getContent().getImages()){
                                    ImageBean imageBean=new ImageBean();
                                    imageBean.setId(imageResult.getId());
                                    imageBean.setWebPath(imageResult.getWebPath());
                                    imageBean.setType(UplodFileState.IMG_TYPE);
                                    images.add(imageBean);
                                    ImageInfo info=new ImageInfo();
                                    info.setOriginUrl(imageResult.getWebPath());
                                    info.setType(Type.IMAGE);
                                    imageInfoList.add(info);
                                }
                            }
                            if (!t.getContent().getVideos().isEmpty()){
                                for (ImageResult imageResult:t.getContent().getVideos()){
                                    ImageBean imageBean=new ImageBean();
                                    imageBean.setId(imageResult.getId());
                                    imageBean.setWebPath(imageResult.getWebPath());
                                    imageBean.setType(UplodFileState.VIDEO_TYPE);
                                    images.add(imageBean);
                                    ImageInfo info=new ImageInfo();
                                    info.setOriginUrl(imageResult.getWebPath());
                                    info.setType(Type.VIDEO);
                                    imageInfoList.add(info);
                                }
                            }
                            mAdapter.notifyDataSetChanged();
                            switch (state) {
app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java
@@ -19,9 +19,11 @@
import com.dayu.pipirrapp.MyApplication;
import com.dayu.pipirrapp.R;
import com.dayu.pipirrapp.adapter.ImageAdapter;
import com.dayu.pipirrapp.bean.ImageBean;
import com.dayu.pipirrapp.bean.net.DealDetailResult;
import com.dayu.pipirrapp.bean.net.ImageResult;
import com.dayu.pipirrapp.bean.net.OrderDetailResult;
import com.dayu.pipirrapp.bean.net.UplodFileState;
import com.dayu.pipirrapp.databinding.ActivityOrderDetailBinding;
import com.dayu.pipirrapp.fragment.OrderFragment;
import com.dayu.pipirrapp.net.ApiManager;
@@ -43,6 +45,8 @@
import java.util.Map;
import cc.shinichi.library.ImagePreview;
import cc.shinichi.library.bean.ImageInfo;
import cc.shinichi.library.bean.Type;
/**
 * OrderDetailActivity -
@@ -57,9 +61,9 @@
    String workOrderId;
    String proResultId;
    ImageAdapter mAdapter;
    List<ImageResult> images = new ArrayList<>();
    List<ImageBean> images = new ArrayList<>();
    RecyclerView mRecyclerView;
    final List<String> imageInfoList = new ArrayList<>();
    List<ImageInfo> imageInfoList = new ArrayList<>();
    int ProResultStateId;
    private ActivityResultLauncher<Intent> activityResultLauncher =
            registerForActivityResult(
@@ -120,7 +124,7 @@
        // 添加间距装饰,确保图片有合适的间隔
        mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(4, DensityUtil.dip2px(this, 8), false));
        mAdapter = new ImageAdapter(this, images, (v, position) -> {
            ImagePreview.getInstance().setContext(OrderDetailActivity.this).setImageList(imageInfoList).start();
            ImagePreview.getInstance().with(OrderDetailActivity.this).setIndex(position).setMediaInfoList(imageInfoList).start();
        });
        mRecyclerView.setAdapter(mAdapter);
@@ -218,9 +222,32 @@
                        if (t.getContent() != null) {
                            binding.orderDealLL.setVisibility(View.VISIBLE);
                            binding.setDealData(t.getContent());
                            images.addAll(t.getContent().getImages());
                            for (ImageResult imageResult : images) {
                                imageInfoList.add(imageResult.getWebPath());
                            if (!t.getContent().getImages().isEmpty()){
                                for (ImageResult imageResult:t.getContent().getImages()){
                                    ImageBean imageBean=new ImageBean();
                                    imageBean.setId(imageResult.getId());
                                    imageBean.setWebPath(imageResult.getWebPath());
                                    imageBean.setType(UplodFileState.IMG_TYPE);
                                    images.add(imageBean);
                                    ImageInfo info=new ImageInfo();
                                    info.setOriginUrl(imageResult.getWebPath());
                                    info.setType(Type.IMAGE);
                                    imageInfoList.add(info);
                                }
                            }
                            if (!t.getContent().getVideos().isEmpty()){
                                for (ImageResult imageResult:t.getContent().getVideos()){
                                    ImageBean imageBean=new ImageBean();
                                    imageBean.setId(imageResult.getId());
                                    imageBean.setWebPath(imageResult.getWebPath());
                                    imageBean.setType(UplodFileState.VIDEO_TYPE);
                                    images.add(imageBean);
                                    ImageInfo info=new ImageInfo();
                                    info.setOriginUrl(imageResult.getWebPath());
                                    info.setType(Type.VIDEO);
                                    imageInfoList.add(info);
                                }
                            }
                            mAdapter.notifyDataSetChanged();
                        } else {
app/src/main/java/com/dayu/pipirrapp/adapter/ImageAdapter.java
@@ -12,7 +12,9 @@
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.dayu.pipirrapp.R;
import com.dayu.pipirrapp.bean.ImageBean;
import com.dayu.pipirrapp.bean.net.ImageResult;
import com.dayu.pipirrapp.bean.net.UplodFileState;
import com.dayu.pipirrapp.tool.GlideEngine;
import java.util.List;
@@ -25,12 +27,12 @@
 * @since 2024-11-27
 */
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder> {
    private List<ImageResult> imageUrls;  // 图片的 URL 或本地路径
    private List<ImageBean> imageUrls;  // 图片的 URL 或本地路径
    private Context mContext;
    private OnItemClickListener onItemClickListener;
    // 构造方法
    public ImageAdapter(Context context, List<ImageResult> imageUrls, OnItemClickListener onItemClickListener) {
    public ImageAdapter(Context context, List<ImageBean> imageUrls, OnItemClickListener onItemClickListener) {
        this.imageUrls = imageUrls;
        this.mContext = context;
        this.onItemClickListener = onItemClickListener;
@@ -46,9 +48,15 @@
    @Override
    public void onBindViewHolder(ImageViewHolder holder, int position) {
        ImageBean imageBean=imageUrls.get(position);
        if (imageBean.getType()== UplodFileState.VIDEO_TYPE){
            holder.play.setVisibility(View.VISIBLE);
        }else {
            holder.play.setVisibility(View.GONE);
        }
        // 使用 Glide 加载图片到 ImageView 中
        Glide.with(holder.itemView.getContext())
                .load(imageUrls.get(position).getWebPath())  // 加载图片的 URL 或路径
                .load(imageBean.getWebPath())  // 加载图片的 URL 或路径
                .thumbnail(0.1f)  // 设置缩略图比例'
                .transform(new CenterCrop(), new RoundedCorners(8))
                .placeholder(R.drawable.ps_image_placeholder)
@@ -70,10 +78,12 @@
    public static class ImageViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;
        ImageView play;
        public ImageViewHolder(View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.thumbnailImageView);
            play=itemView.findViewById(R.id.item_play);
        }
    }
app/src/main/java/com/dayu/pipirrapp/bean/ImageBean.java
New file
@@ -0,0 +1,38 @@
package com.dayu.pipirrapp.bean;
/**
 * ImageBean -图片显示adapter
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2025-01-09
 */
public class ImageBean {
    String id;
    String webPath;
    int type;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getWebPath() {
        return webPath;
    }
    public void setWebPath(String webPath) {
        this.webPath = webPath;
    }
    public int getType() {
        return type;
    }
    public void setType(int type) {
        this.type = type;
    }
}
app/src/main/java/com/dayu/pipirrapp/bean/net/AddIssueRequest.java
@@ -5,7 +5,7 @@
import java.util.Map;
/**
 * AddIssueRequest -
 * AddIssueRequest - 添加问题上报
 *
 * @author zuoxiao
 * @version 1.0
@@ -16,6 +16,7 @@
    String inspectorId;//巡检员ID
    String content;//结果内容
    List<ImageRequest> images = new ArrayList<>();
    List<ImageRequest> videos = new ArrayList<>();
    String completeTime;//任务完成时间
    String lng;
    String lat;
@@ -54,7 +55,12 @@
            ImageRequest image = new ImageRequest();
            image.setWebPath(data.getWebPath());
            image.setId(data.getPostId());
            images.add(image);
            if (data.getUploadType()==UplodFileState.IMG_TYPE){
                images.add(image);
            }else {
                videos.add(image);
            }
        }
    }
app/src/main/java/com/dayu/pipirrapp/bean/net/AddProcessingRequest.java
@@ -16,6 +16,7 @@
    String inspectorId;//巡检员ID
    String content;//结果内容
    List<ImageRequest> images = new ArrayList<>();
    List<ImageRequest> videos = new ArrayList<>();
    String completeTime;//任务完成时间
    String lng;
    String lat;
@@ -79,7 +80,12 @@
            ImageRequest image = new ImageRequest();
            image.setWebPath(data.getWebPath());
            image.setId(data.getPostId());
            images.add(image);
            if (data.getUploadType()==UplodFileState.IMG_TYPE){
                images.add(image);
            }else {
                videos.add(image);
            }
        }
    }
app/src/main/java/com/dayu/pipirrapp/bean/net/DealDetailResult.java
@@ -10,18 +10,37 @@
 * @since 2024-12-06
 */
public class DealDetailResult {
    String proResultId;//处理结果ID
    String workOrderId;//
    String inspector;// 巡检员
    String content;//结果内容
    double lng;// 经度
    double lat;// 纬度
    String completeTime;// 任务完成时间  精确到分
    String reportTime;//上报时间
    int state;//状态 1-已上报,2-已通过,3-已驳回
    String stateName;// 状态名称
    //处理结果ID
    String proResultId;
    String workOrderId;
    // 巡检员
    String inspector;
    //结果内容
    String content;
    // 经度
    double lng;
    // 纬度
    double lat;
    // 任务完成时间  精确到分
    String completeTime;
    //上报时间
    String reportTime;
    //状态 1-已上报,2-已通过,3-已驳回
    int state;
    // 状态名称
    String stateName;
    List<ImageResult> images;
    List<ImageResult> videos;
    public List<ImageResult> getVideos() {
        return videos;
    }
    public void setVideos(List<ImageResult> videos) {
        this.videos = videos;
    }
    public List<ImageResult> getImages() {
        return images;
app/src/main/java/com/dayu/pipirrapp/bean/net/IssueResult.java
@@ -20,11 +20,21 @@
    //String                         audios: [],
    //String                         videos: [],
    public List<ImageResult> images;
    public List<ImageResult> videos;
    public String replyTime;//上报回复时间 null,
    public String replyContent;//回复内容
    public int stateId;//
    public String state;//未受理
    public List<ImageResult> getVideos() {
        return videos;
    }
    public void setVideos(List<ImageResult> videos) {
        this.videos = videos;
    }
    public String getIssueReportId() {
        return issueReportId;
    }
app/src/main/java/com/dayu/pipirrapp/net/ApiManager.java
@@ -313,13 +313,18 @@
                int progress = (int) (100 * bytesWritten / contentLength);
                // 例如:更新 ProgressBar 或显示进度
                runOnUiThread(() -> {
                    if (progress <5) {
                        uplodData.setProgress(0);
                    }
                    // 进度条更新代码
                    if (adapter != null && uplodData.getAdapterPosition() != -1) {
                        //优化不频繁更新进度
                        if (progress - uplodData.getProgress() > 5 || progress == 100){
                        if (progress - uplodData.getProgress() > 5 || progress == 100) {
                            uplodData.setProgress(progress);
                            adapter.updateProgress(uplodData);
                        }
                    }
                    MyLog.d("progressRequestBodyHolder>>>path" + "adapterPosition:" + uplodData.getAdapterPosition() + ">>>上传进度: " + progress + "%");
                });
app/src/main/java/com/dayu/pipirrapp/net/RetrofitClient.java
@@ -36,7 +36,7 @@
        //添加日志拦截器
        //添加数据请求统一处理拦截器
//        if (BuildConfig.DEBUG) {
//        builder.addInterceptor(loggingInterceptor);
        builder.addInterceptor(loggingInterceptor);
//        }
        OkHttpClient client = builder.build();
app/src/main/res/drawable/play.xml
New file
@@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="48"
    android:viewportHeight="48">
  <path
      android:pathData="M24,44C35.046,44 44,35.046 44,24C44,12.954 35.046,4 24,4C12.954,4 4,12.954 4,24C4,35.046 12.954,44 24,44Z"
      android:strokeLineJoin="round"
      android:strokeWidth="4"
      android:fillColor="#00000000"
      android:strokeColor="#FFFFFF"/>
  <path
      android:pathData="M20,24V17.072L26,20.536L32,24L26,27.464L20,30.928V24Z"
      android:strokeLineJoin="round"
      android:strokeWidth="4"
      android:fillColor="#00000000"
      android:strokeColor="#FFFFFF"/>
</vector>
app/src/main/res/layout/item_image.xml
@@ -3,6 +3,7 @@
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    android:layout_gravity="center"
    android:elevation="4dp">
    <ImageView
@@ -11,4 +12,13 @@
        android:layout_height="match_parent"
        android:scaleType="centerCrop" />
    <ImageView
        android:id="@+id/item_play"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="center"
        android:src="@drawable/play"/>
</androidx.cardview.widget.CardView>