From 596d0bcbacd8dde70f0bbcfdf07db5cf694220ef Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 08 一月 2025 09:33:20 +0800
Subject: [PATCH] 1.修复上传文件取消上传还会上传bug 2.添加上传视频功能 3.添加关闭activity时关闭上传功能。

---
 app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java |  172 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 134 insertions(+), 38 deletions(-)

diff --git a/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java b/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java
index b5bd809..7302fde 100644
--- a/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java
+++ b/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java
@@ -2,19 +2,24 @@
 
 import android.content.Context;
 import android.net.Uri;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageView;
+import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.load.engine.DiskCacheStrategy;
 import com.dayu.pipirrapp.R;
+import com.dayu.pipirrapp.bean.net.UplodFileState;
 import com.dayu.pipirrapp.listener.OnItemLongClickListener;
-import com.luck.picture.lib.adapter.holder.PreviewGalleryAdapter;
+import com.dayu.pipirrapp.utils.MyLog;
+import com.king.view.circleprogressview.CircleProgressView;
 import com.luck.picture.lib.config.PictureMimeType;
 import com.luck.picture.lib.config.SelectMimeType;
 import com.luck.picture.lib.entity.LocalMedia;
@@ -22,6 +27,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * AddPictureAdapter -
@@ -37,27 +43,16 @@
     public static final int TYPE_PICTURE = 2;
     private final LayoutInflater mInflater;
     private final ArrayList<LocalMedia> list = new ArrayList<>();
+    Map<String, UplodFileState> fileStates;
     private int selectMax = 9;
+    private final Context mContext;
 
-    /**
-     * 鍒犻櫎
-     */
-    public void delete(int position) {
-        try {
 
-            if (position != RecyclerView.NO_POSITION && list.size() > position) {
-                list.remove(position);
-                notifyItemRemoved(position);
-                notifyItemRangeChanged(position, list.size());
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    public AddPictureAdapter(Context context, List<LocalMedia> result) {
+    public AddPictureAdapter(Context context, List<LocalMedia> result, Map<String, UplodFileState> fileStates) {
         this.mInflater = LayoutInflater.from(context);
         this.list.addAll(result);
+        this.mContext = context;
+        this.fileStates = fileStates;
     }
 
     public void setSelectMax(int selectMax) {
@@ -78,19 +73,6 @@
         }
     }
 
-    public static class ViewHolder extends RecyclerView.ViewHolder {
-
-        ImageView mImg;
-        ImageView mIvDel;
-        TextView tvDuration;
-
-        public ViewHolder(View view) {
-            super(view);
-            mImg = view.findViewById(R.id.fiv);
-            mIvDel = view.findViewById(R.id.iv_del);
-            tvDuration = view.findViewById(R.id.tv_duration);
-        }
-    }
 
     @Override
     public int getItemCount() {
@@ -113,6 +95,7 @@
     /**
      * 鍒涘缓ViewHolder
      */
+    @NonNull
     @Override
     public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
         View view = mInflater.inflate(R.layout.item_add_filter_image, viewGroup, false);
@@ -128,24 +111,25 @@
      * 璁剧疆鍊�
      */
     @Override
-    public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
+    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) {
         //灏戜簬MaxSize寮狅紝鏄剧ず缁х画娣诲姞鐨勫浘鏍�
         if (getItemViewType(position) == TYPE_CAMERA) {
             viewHolder.mImg.setImageResource(R.mipmap.ic_add_image);
-            viewHolder.mImg.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View view) {
-                    if (mItemClickListener != null) {
-                        mItemClickListener.openPicture();
-                    }
+            viewHolder.mImg.setOnClickListener(view -> {
+                if (mItemClickListener != null) {
+                    mItemClickListener.openPicture();
                 }
             });
             viewHolder.mIvDel.setVisibility(View.INVISIBLE);
+            viewHolder.circleProgressView.setVisibility(View.GONE);
+            viewHolder.maskLayerBg.setVisibility(View.GONE);
         } else {
+            //鍒犻櫎鍥剧墖
             viewHolder.mIvDel.setVisibility(View.VISIBLE);
             viewHolder.mIvDel.setOnClickListener(view -> {
                 int index = viewHolder.getAbsoluteAdapterPosition();
                 if (index != RecyclerView.NO_POSITION && list.size() > index) {
+                    mItemClickListener.onDeleteClick(index);
                     list.remove(index);
                     notifyItemRemoved(index);
                     notifyItemRangeChanged(index, list.size());
@@ -178,20 +162,82 @@
                         .diskCacheStrategy(DiskCacheStrategy.ALL)
                         .into(viewHolder.mImg);
             }
+
+            // 鏇存柊杩涘害
+            UplodFileState uplodFileState = TextUtils.isEmpty(media.getCompressPath())
+                    ? fileStates.get(media.getRealPath())
+                    : fileStates.get(media.getCompressPath());
+            if (uplodFileState != null) {
+                uplodFileState.setAdapterPosition(position);
+                MyLog.d("progressRequestBodyHolder>>>" + "State:" + uplodFileState.getState() + ">>>position:" + position + ">>>Progress: " + uplodFileState.getProgress());
+
+                if (uplodFileState.getState() == UplodFileState.STATE_UPDING) {
+                    MyLog.d("progressRequestBodyHolder>>>" + "姝e湪涓婁紶");
+                    viewHolder.postError.setVisibility(View.GONE);
+                    if (uplodFileState.getProgress() < 100) {
+                        viewHolder.maskLayerBg.setVisibility(View.VISIBLE);
+                        viewHolder.circleProgressView.setVisibility(View.VISIBLE);
+                        viewHolder.circleProgressView.setProgress(uplodFileState.getProgress());
+
+                    } else {
+                        viewHolder.circleProgressView.setVisibility(View.GONE);
+                        viewHolder.maskLayerBg.setVisibility(View.GONE);
+                    }
+                } else if (uplodFileState.getState() == UplodFileState.STATE_DONE) {
+                    MyLog.d("progressRequestBodyHolder>>>" + "瀹屾垚");
+                    viewHolder.maskLayerBg.setVisibility(View.GONE);
+                    viewHolder.circleProgressView.setVisibility(View.GONE);
+                } else {
+                    MyLog.d("progressRequestBodyHolder>>>" + "閿欒");
+                    viewHolder.maskLayerBg.setVisibility(View.VISIBLE);
+                    viewHolder.postError.setVisibility(View.VISIBLE);
+                    viewHolder.circleProgressView.setVisibility(View.GONE);
+                }
+            }
+
+
             //itemView 鐨勭偣鍑讳簨浠�
             if (mItemClickListener != null) {
                 viewHolder.itemView.setOnClickListener(v -> {
                     int adapterPosition = viewHolder.getAbsoluteAdapterPosition();
                     mItemClickListener.onItemClick(v, adapterPosition);
                 });
+                viewHolder.postError.setOnClickListener(v -> {
+                    mItemClickListener.onReUpload(uplodFileState);
+                });
             }
 
             if (mItemLongClickListener != null) {
                 viewHolder.itemView.setOnLongClickListener(v -> {
-                    int adapterPosition = viewHolder.getAbsoluteAdapterPosition();
+                    int adapterPosition = viewHolder.getBindingAdapterPosition();
                     mItemLongClickListener.onItemLongClick(viewHolder, adapterPosition, v);
                     return true;
                 });
+            }
+        }
+    }
+
+    /**
+     * 鏇存柊杩涘害
+     *
+     * @param uplodFileState
+     */
+    public void updateProgress(UplodFileState uplodFileState) {
+        MyLog.d("updateProgress>>>" + "State:" + uplodFileState.getState() + ">>>position:" + uplodFileState.getAdapterPosition() + ">>>Progress: " + uplodFileState.getProgress());
+
+        // 鏇存柊杩涘害鍙傛暟
+        if (fileStates.containsKey(uplodFileState.getFilePath())) {
+            // 鑾峰彇宸叉湁鐨� UplodFileState 瀵硅薄骞舵洿鏂拌繘搴�
+            UplodFileState existingState = fileStates.get(uplodFileState.getFilePath());
+            int position = existingState.getAdapterPosition();
+            existingState.setState(uplodFileState.getState());
+            if (uplodFileState.getState() == 0) {
+                existingState.setState(uplodFileState.getState());
+                existingState.setProgress(uplodFileState.getProgress()); // 鏇存柊杩涘害
+                // 鑾峰彇杩涘害鏇存柊椤圭殑浣嶇疆
+            }
+            if (position != RecyclerView.NO_POSITION) {
+                notifyItemChanged(position);
             }
         }
     }
@@ -215,6 +261,18 @@
          * Open PictureSelector
          */
         void openPicture();
+
+        /**
+         * 鍒犻櫎浜嗘煇涓�涓�
+         *
+         * @param position
+         */
+        void onDeleteClick(int position);
+
+        /**
+         * 涓婁紶澶辫触鍚庨噸鏂颁笂浼�
+         */
+        void onReUpload(UplodFileState uplodFileState);
     }
 
     private OnItemLongClickListener mItemLongClickListener;
@@ -222,4 +280,42 @@
     public void setItemLongClickListener(OnItemLongClickListener l) {
         this.mItemLongClickListener = l;
     }
+
+
+    /**
+     * 鍒犻櫎
+     */
+    public void delete(int position) {
+        try {
+            if (position != RecyclerView.NO_POSITION && list.size() > position) {
+                list.remove(position);
+                notifyItemRemoved(position);
+                notifyItemRangeChanged(position, list.size());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static class ViewHolder extends RecyclerView.ViewHolder {
+
+        ImageView mImg;
+        ImageView mIvDel;
+        ImageView postError;
+        TextView tvDuration;
+        RelativeLayout maskLayerBg;
+        CircleProgressView circleProgressView;
+
+
+        public ViewHolder(View view) {
+            super(view);
+            mImg = view.findViewById(R.id.fiv);
+            mIvDel = view.findViewById(R.id.iv_del);
+            tvDuration = view.findViewById(R.id.tv_duration);
+            circleProgressView = view.findViewById(R.id.cpv);
+            maskLayerBg = view.findViewById(R.id.mask_layer_bg);
+            postError = view.findViewById(R.id.postError);
+        }
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.8.0