From 3ac1a2854f23f61c61e537ea6a7add0c9a70438e Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期一, 02 十二月 2024 15:28:15 +0800
Subject: [PATCH] 1.上传巡检定位点相关功能 2.上传文件相关

---
 app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java |  186 +++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 172 insertions(+), 14 deletions(-)

diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
index fb91e02..cebbdd9 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
@@ -1,14 +1,15 @@
 package com.dayu.pipirrapp.activity;
 
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
-import android.provider.MediaStore;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.animation.Animation;
-import android.view.animation.AnimationUtils;
 
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.SimpleItemAnimator;
@@ -17,20 +18,31 @@
 import com.dayu.pipirrapp.databinding.ActivityOrderDealBinding;
 import com.dayu.pipirrapp.tool.FullyGridLayoutManager;
 import com.dayu.pipirrapp.tool.GlideEngine;
+import com.dayu.pipirrapp.view.TitleBar;
 import com.luck.picture.lib.basic.PictureSelectionModel;
 import com.luck.picture.lib.basic.PictureSelector;
-import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
 import com.luck.picture.lib.config.SelectMimeType;
-import com.luck.picture.lib.config.SelectModeConfig;
 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.interfaces.OnGridItemSelectAnimListener;
-import com.luck.picture.lib.interfaces.OnQueryFilterListener;
-import com.luck.picture.lib.interfaces.OnSelectAnimListener;
+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 java.io.File;
 import java.util.ArrayList;
 import java.util.List;
+
+import top.zibin.luban.CompressionPredicate;
+import top.zibin.luban.Luban;
+import top.zibin.luban.OnNewCompressListener;
+import top.zibin.luban.OnRenameListener;
 
 /**
  * OrderDealDetailActivity -
@@ -41,24 +53,28 @@
  * @since 2024-11-27
  */
 public class OrderDealActivity extends BaseActivity {
-
+    private String TAG = "OrderDealActivity";
     ActivityOrderDealBinding binding;
     RecyclerView mRecyclerView;
     AddPictureAdapter mAdapter;
     int maxSelectNum = 10;//鏈�澶х収鐗�
     int maxSelectVideoNum = 0;//鏈�澶ц棰�
     private final List<LocalMedia> mData = new ArrayList<>();
+    private ActivityResultLauncher<Intent> launcherResult;
+    private ImageEngine imageEngine;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         binding = ActivityOrderDealBinding.inflate(LayoutInflater.from(this));
         setContentView(binding.getRoot());
+        launcherResult = createActivityResultLauncher();
         initView();
     }
 
 
     void initView() {
+        new TitleBar(this).setTitleText("澶勭悊宸ュ崟").setLeftIco().setLeftIcoListening(v -> OrderDealActivity.this.finish());
         mRecyclerView = binding.recycler;
         FullyGridLayoutManager manager = new FullyGridLayoutManager(this,
                 4, GridLayoutManager.VERTICAL, false);
@@ -72,29 +88,171 @@
         mAdapter = new AddPictureAdapter(this, mData);
         mAdapter.setSelectMax(maxSelectNum + maxSelectVideoNum);
         mRecyclerView.setAdapter(mAdapter);
+        imageEngine = GlideEngine.createGlideEngine();
         mAdapter.setOnItemClickListener(new AddPictureAdapter.OnItemClickListener() {
             @Override
             public void onItemClick(View v, int position) {
-
+                // 棰勮鍥剧墖銆佽棰戙�侀煶棰�
+                PictureSelector.create(OrderDealActivity.this)
+                        .openPreview()
+                        .setImageEngine(imageEngine)
+                        .setExternalPreviewEventListener(new MyExternalPreviewEventListener())
+                        .startActivityPreview(position, true, mAdapter.getData());
             }
 
             @Override
             public void openPicture() {
+                //娣诲姞鍥剧墖
                 mOpenPicture();
             }
         });
     }
 
+    /**
+     * 娣诲姞鍥剧墖
+     */
     private void mOpenPicture() {
         // 杩涘叆鐩稿唽
         PictureSelectionModel selectionModel = PictureSelector.create(this)
                 .openGallery(SelectMimeType.ofImage())
                 .setMaxSelectNum(maxSelectNum)
                 .setMaxVideoSelectNum(maxSelectVideoNum)
-                .setImageEngine(GlideEngine.createGlideEngine())
+                .setImageEngine(imageEngine)
+                //璁剧疆鍥剧墖鍘嬬缉
+                .setCompressEngine(new ImageFileCompressEngine())
                 .setSelectedData(mAdapter.getData());
 
-        selectionModel.forResult(PictureConfig.CHOOSE_REQUEST);
+        selectionModel.forResult(launcherResult);
+    }
+
+    /**
+     * 鍒涘缓涓�涓狝ctivityResultLauncher
+     *
+     * @return
+     */
+    private ActivityResultLauncher<Intent> createActivityResultLauncher() {
+        return registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
+                result -> {
+                    int resultCode = result.getResultCode();
+                    if (resultCode == RESULT_OK) {
+                        ArrayList<LocalMedia> selectList = PictureSelector.obtainSelectorList(result.getData());
+                        analyticalSelectResults(selectList);
+                    } else if (resultCode == RESULT_CANCELED) {
+                        Log.i(TAG, "onActivityResult PictureSelector Cancel");
+                    }
+                });
+    }
+
+    /**
+     * 澶栭儴棰勮鐩戝惉浜嬩欢
+     */
+    private class MyExternalPreviewEventListener implements OnExternalPreviewEventListener {
+
+        @Override
+        public void onPreviewDelete(int position) {
+            mAdapter.remove(position);
+            mAdapter.notifyItemRemoved(position);
+        }
+
+        @Override
+        public boolean onLongPressDownload(Context context, LocalMedia media) {
+            return false;
+        }
+    }
+
+    /**
+     * 澶勭悊閫夋嫨缁撴灉
+     *
+     * @param result
+     */
+    private void analyticalSelectResults(ArrayList<LocalMedia> result) {
+        for (LocalMedia media : result) {
+            if (media.getWidth() == 0 || media.getHeight() == 0) {
+                if (PictureMimeType.isHasImage(media.getMimeType())) {
+                    MediaExtraInfo imageExtraInfo = MediaUtils.getImageSize(this, media.getPath());
+                    media.setWidth(imageExtraInfo.getWidth());
+                    media.setHeight(imageExtraInfo.getHeight());
+                } else if (PictureMimeType.isHasVideo(media.getMimeType())) {
+                    MediaExtraInfo videoExtraInfo = MediaUtils.getVideoSize(this, media.getPath());
+                    media.setWidth(videoExtraInfo.getWidth());
+                    media.setHeight(videoExtraInfo.getHeight());
+                }
+            }
+            Log.i(TAG, "鏂囦欢鍚�: " + media.getFileName());
+            Log.i(TAG, "鏄惁鍘嬬缉:" + media.isCompressed());
+            Log.i(TAG, "鍘嬬缉:" + media.getCompressPath());
+            Log.i(TAG, "鍒濆璺緞:" + media.getPath());
+            Log.i(TAG, "缁濆璺緞:" + media.getRealPath());
+            Log.i(TAG, "鏄惁瑁佸壀:" + media.isCut());
+            Log.i(TAG, "瑁佸壀璺緞:" + media.getCutPath());
+            Log.i(TAG, "鏄惁寮�鍚師鍥�:" + media.isOriginal());
+            Log.i(TAG, "鍘熷浘璺緞:" + media.getOriginalPath());
+            Log.i(TAG, "娌欑洅璺緞:" + media.getSandboxPath());
+            Log.i(TAG, "姘村嵃璺緞:" + media.getWatermarkPath());
+            Log.i(TAG, "瑙嗛缂╃暐鍥�:" + media.getVideoThumbnailPath());
+            Log.i(TAG, "鍘熷瀹介珮: " + media.getWidth() + "x" + media.getHeight());
+            Log.i(TAG, "瑁佸壀瀹介珮: " + media.getCropImageWidth() + "x" + media.getCropImageHeight());
+            Log.i(TAG, "鏂囦欢澶у皬: " + PictureFileUtils.formatAccurateUnitFileSize(media.getSize()));
+            Log.i(TAG, "鏂囦欢鏃堕暱: " + media.getDuration());
+        }
+        runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                boolean isMaxSize = result.size() == mAdapter.getSelectMax();
+                int oldSize = mAdapter.getData().size();
+                mAdapter.notifyItemRangeRemoved(0, isMaxSize ? oldSize + 1 : oldSize);
+                mAdapter.getData().clear();
+
+                mAdapter.getData().addAll(result);
+                mAdapter.notifyItemRangeInserted(0, result.size());
+            }
+        });
+    }
+
+
+    /**
+     * 鑷畾涔夊浘鐗囧帇缂�
+     */
+    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();
+        }
     }
 
 

--
Gitblit v1.8.0