From 51e977ecf8b086b5402271486fb87c2f57d641f2 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期四, 02 一月 2025 09:23:24 +0800
Subject: [PATCH] 添加视频上传的部分功能

---
 app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java |   83 ++++++++++++++++++++++++-----------------
 1 files changed, 49 insertions(+), 34 deletions(-)

diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java
index ba78e09..d56f0b0 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java
@@ -4,7 +4,6 @@
 
 import android.content.Context;
 import android.content.Intent;
-import android.os.Build;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.Log;
@@ -31,11 +30,11 @@
 import com.dayu.pipirrapp.net.BaseResponse;
 import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
 import com.dayu.pipirrapp.net.upload.UploadFileListener;
-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.ServiceUtils;
 import com.dayu.pipirrapp.utils.ToastUtil;
 import com.dayu.pipirrapp.view.TitleBar;
 import com.jeremyliao.liveeventbus.LiveEventBus;
@@ -54,8 +53,10 @@
 import com.tencent.bugly.crashreport.CrashReport;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import retrofit2.Call;
@@ -74,17 +75,20 @@
     RecyclerView mRecyclerView;
     AddPictureAdapter mAdapter;
     int maxSelectNum = 10;//鏈�澶х収鐗�
-    int maxSelectVideoNum = 0;//鏈�澶ц棰�
+    int maxSelectVideoNum = 3;//鏈�澶ц棰�
+
+    int videoMaxSecond = 60;
     private final List<LocalMedia> mData = new ArrayList<>();
     private ActivityResultLauncher<Intent> launcherResult;
     private ImageEngine imageEngine;
-    List<UplodFileState> uplodFileStates = new ArrayList<>();
+    Map<String, UplodFileState> uplodFileStates = new HashMap<>();
+    //    List<UplodFileState> uplodFileStates = new ArrayList<>();
     LatLonBean latLonBean;
 
     /**
      * 瀹氫綅鐩戝惉
      */
-    private Observer<Object> locationObserver = new Observer<Object>() {
+    private final Observer<Object> locationObserver = new Observer<Object>() {
         @Override
         public void onChanged(Object o) {
             latLonBean = (LatLonBean) o;
@@ -113,7 +117,7 @@
         }
         mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(4,
                 DensityUtil.dip2px(this, 8), false));
-        mAdapter = new AddPictureAdapter(this, mData);
+        mAdapter = new AddPictureAdapter(this, mData, uplodFileStates);
         mAdapter.setSelectMax(maxSelectNum + maxSelectVideoNum);
         mRecyclerView.setAdapter(mAdapter);
         imageEngine = GlideEngine.createGlideEngine();
@@ -141,7 +145,7 @@
         });
         binding.dealButton.setOnClickListener(v -> {
             boolean isAllPost = true;
-            for (UplodFileState imgData : uplodFileStates) {
+            for (UplodFileState imgData : uplodFileStates.values()) {
                 if (imgData.getState() == 0) {
                     isAllPost = false;
                 }
@@ -149,7 +153,7 @@
 
             if (!TextUtils.isEmpty(binding.contentET.getText().toString())) {
                 if (isAllPost) {
-                    if (uplodFileStates.size() > 0) {
+                    if (!uplodFileStates.isEmpty()) {
                         postData();
                     } else {
                         ToastUtil.showToast(AddIssueActivity.this, "璇蜂笂浼犲浘鐗�");
@@ -169,12 +173,20 @@
     private void mOpenPicture() {
         // 杩涘叆鐩稿唽
         PictureSelectionModel selectionModel = PictureSelector.create(this)
-                .openGallery(SelectMimeType.ofImage())
+                .openGallery(SelectMimeType.ofAll())
                 .setMaxSelectNum(maxSelectNum)
                 .setMaxVideoSelectNum(maxSelectVideoNum)
                 .setImageEngine(imageEngine)
                 //璁剧疆鍥剧墖鍘嬬缉
                 .setCompressEngine(new ImageFileCompressEngine())
+                //璁剧疆瑙嗛鍥剧墖涓�璧峰湪鐩稿唽閫夋嫨
+                .isWithSelectVideoImage(true)
+                //璁剧疆鏈�澶ц棰戞椂闀�
+                .setRecordVideoMaxSecond(videoMaxSecond)
+                // 杩囨护瑙嗛鏈�澶ф椂闀�
+                .setFilterVideoMaxSecond(videoMaxSecond)
+                // 鎷嶇収鏄惁绾犳鏃嬭浆鍥剧墖
+                .isCameraRotateImage(true)
                 .setSelectedData(mAdapter.getData());
 
         selectionModel.forResult(launcherResult);
@@ -224,10 +236,11 @@
     private void analyticalSelectResults(ArrayList<LocalMedia> result) {
         //鑾峰彇褰撳墠uplodFileStates鎵�鏈夌殑鍥剧墖鍦板潃
         Set<String> existingPaths = new HashSet<>();
-        for (UplodFileState uplodData : uplodFileStates) {
+        for (UplodFileState uplodData : uplodFileStates.values()) {
             existingPaths.add(uplodData.getFilePath());
         }
         //鑾峰彇鍦≒ictureSelector鐨勭浉鍐屾椂鍙栨秷閫変腑鐨勫浘鐗�
+        Set<String> resultPaths = new HashSet<>();
 
         for (LocalMedia media : result) {
             if (media.getWidth() == 0 || media.getHeight() == 0) {
@@ -259,15 +272,33 @@
             Log.i(TAG, "鏂囦欢鏃堕暱: " + media.getDuration());
             String compressPath = media.getCompressPath();
             //鍒ゆ柇鏄惁鏈夎繖涓矾寰勶紝娌℃湁鐨勮瘽涓婁紶璇ュ浘鐗囧苟娣诲姞uplodFileStates涓�
+            if (TextUtils.isEmpty(compressPath)) {
+                compressPath = media.getRealPath();
+            }
             if (!existingPaths.contains(compressPath)) {
                 UplodFileState uplodFileState = new UplodFileState();
                 uplodFileState.setFilePath(compressPath);
-                uplodFileStates.add(uplodFileState);
+                uplodFileStates.put(compressPath, uplodFileState);
                 // 鎵ц涓婁紶鍥剧墖鐨勬搷浣�
                 uplodeImg(uplodFileState);
             }
-
-
+            resultPaths.add(media.getCompressPath());
+        }
+        //澶勭悊浠庣浉鍐岃繑鍥炴椂鍙栨秷鐨勫浘鐗囧鐞�
+        existingPaths.removeAll(resultPaths);
+        if (!existingPaths.isEmpty()) {
+            List<UplodFileState> toRemove = new ArrayList<>();
+            for (String path : existingPaths) {
+                for (UplodFileState uplodFileState : uplodFileStates.values()) {
+                    if (path.equals(uplodFileState.getFilePath())) {
+                        uplodFileState.getThisCall().cancel();
+                        toRemove.add(uplodFileState);
+                    }
+                }
+            }
+            for (UplodFileState removeFile : toRemove) {
+                uplodFileStates.remove(removeFile.getFilePath());
+            }
         }
         runOnUiThread(new Runnable() {
             @Override
@@ -287,20 +318,11 @@
 
     //涓婁紶鍥剧墖
     private void uplodeImg(UplodFileState uplodFileState) {
-        ApiManager.getInstance().uploadFile(this, uplodFileState, new UploadFileListener() {
-            @Override
-            public void onBack(UplodFileState state) {
-                for (UplodFileState uplodFile : uplodFileStates) {
-                    if (uplodFile.getFilePath().equals(state.getFilePath())) {
-                        int index = uplodFileStates.indexOf(uplodFile);
-                        if (index != -1) {
-                            uplodFileStates.set(index, uplodFile); // 鏇存柊瀵瑰簲鐨勯」
-                        }
-                    }
+        ApiManager.getInstance().uploadFile(this, uplodFileState, state -> {
 
-                }
-            }
-        });
+            uplodFileStates.replace(state.getFilePath(), state);
+            mAdapter.updateProgress(uplodFileState);
+        }, mAdapter);
     }
 
     /**
@@ -340,14 +362,7 @@
      * 寮�濮嬪畾浣嶇浉鍏抽�昏緫
      */
     private void startLocation() {
-        Intent location = new Intent(this, MyLocationService.class);
-        location.putExtra("isSingle", true);
-        //寮�鍚畾浣�
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-            startForegroundService(location);
-        } else {
-            startService(location);
-        }
+        ServiceUtils.startLocationService(this, true);
         //鑾峰彇瀹氫綅鏈嶅姟浼犺繃鏉ョ殑鍧愭爣鐐�
         LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver);
     }

--
Gitblit v1.8.0