From 7a1caa42ad3282ff22513785fa997953e084b188 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期一, 16 十二月 2024 15:50:31 +0800
Subject: [PATCH] 1.修改app的Icon。 2.优化取水口加载本地数据,改为异步加载。 3.添加取水口点击后显示取水口信息。 4.美化登录界面。

---
 app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java |  311 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 297 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..ffc7a1c 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
@@ -1,36 +1,63 @@
 package com.dayu.pipirrapp.activity;
 
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
+import static com.dayu.pipirrapp.net.Constants.BASE_URL;
+
+import android.content.Context;
+import android.content.Intent;
 import android.os.Bundle;
-import android.provider.MediaStore;
+import android.text.TextUtils;
+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.lifecycle.Observer;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.SimpleItemAnimator;
 
+import com.dayu.pipirrapp.MyApplication;
 import com.dayu.pipirrapp.adapter.AddPictureAdapter;
+import com.dayu.pipirrapp.bean.db.LatLonBean;
+import com.dayu.pipirrapp.bean.net.AddProcessingRequest;
+import com.dayu.pipirrapp.bean.net.InsectionResult;
+import com.dayu.pipirrapp.bean.net.UplodFileState;
 import com.dayu.pipirrapp.databinding.ActivityOrderDealBinding;
+import com.dayu.pipirrapp.fragment.OrderFragment;
+import com.dayu.pipirrapp.net.ApiManager;
+import com.dayu.pipirrapp.net.BaseResponse;
+import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
+import com.dayu.pipirrapp.net.upload.UploadFileListener;
 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.MyLog;
+import com.dayu.pipirrapp.utils.ServiceUtils;
+import com.dayu.pipirrapp.utils.ToastUtil;
+import com.dayu.pipirrapp.view.TitleBar;
+import com.jeremyliao.liveeventbus.LiveEventBus;
 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.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.utils.DensityUtil;
+import com.luck.picture.lib.utils.MediaUtils;
+import com.luck.picture.lib.utils.PictureFileUtils;
+import com.tencent.bugly.crashreport.CrashReport;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
+
+import retrofit2.Call;
 
 /**
  * OrderDealDetailActivity -
@@ -41,24 +68,44 @@
  * @since 2024-11-27
  */
 public class OrderDealActivity extends BaseActivity {
-
+    private final 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;
+    List<UplodFileState> uplodFileStates = new ArrayList<>();
+    String workOrderId;
+    LatLonBean latLonBean;
+
+    /**
+     * 瀹氫綅鐩戝惉
+     */
+    private Observer<Object> locationObserver = new Observer<Object>() {
+        @Override
+        public void onChanged(Object o) {
+            MyLog.d("OrderDealActivity>>>locationObserver>>");
+            latLonBean = (LatLonBean) o;
+        }
+    };
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         binding = ActivityOrderDealBinding.inflate(LayoutInflater.from(this));
         setContentView(binding.getRoot());
+        workOrderId = this.getIntent().getStringExtra("workOrderId");
+        launcherResult = createActivityResultLauncher();
         initView();
+        startLocation();
     }
 
 
     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,30 +119,266 @@
         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();
+            }
+
+            @Override
+            public void onDeleteClick(int position) {
+                deleteItem(position);
+            }
+        });
+        binding.dealButton.setOnClickListener(v -> {
+            boolean isAllPost = true;
+            for (UplodFileState imgData : uplodFileStates) {
+                if (imgData.getState() == 0) {
+                    isAllPost = false;
+                }
+            }
+
+            if (!TextUtils.isEmpty(binding.contentET.getText().toString())) {
+                if (isAllPost) {
+                    if (uplodFileStates.size() > 0) {
+                        postData();
+                    } else {
+                        ToastUtil.showToast(OrderDealActivity.this, "璇蜂笂浼犲浘鐗�");
+                    }
+                } else {
+                    ToastUtil.showToast(OrderDealActivity.this, "鍥剧墖姝e湪涓婁紶璇风◢鍚庢彁浜�");
+                }
+            } else {
+                ToastUtil.showToast(OrderDealActivity.this, "璇疯緭鍏ュ弽棣堝唴瀹�");
             }
         });
     }
 
+    /**
+     * 娣诲姞鍥剧墖
+     */
     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) {
+            deleteItem(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) {
+        //鑾峰彇褰撳墠uplodFileStates鎵�鏈夌殑鍥剧墖鍦板潃
+        Set<String> existingPaths = new HashSet<>();
+        for (UplodFileState uplodData : uplodFileStates) {
+            existingPaths.add(uplodData.getFilePath());
+        }
+        //鑾峰彇鍦≒ictureSelector鐨勭浉鍐屾椂鍙栨秷閫変腑鐨勫浘鐗�
+        Set<String> resultPaths = new HashSet<>();
+        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());
+            String compressPath = media.getCompressPath();
+            //鍒ゆ柇鏄惁鏈夎繖涓矾寰勶紝娌℃湁鐨勮瘽涓婁紶璇ュ浘鐗�
+            if (!existingPaths.contains(compressPath)) {
+                UplodFileState uplodFileState = new UplodFileState();
+                uplodFileState.setFilePath(compressPath);
+                uplodFileStates.add(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) {
+                    if (path.equals(uplodFileState.getFilePath())) {
+                        uplodFileState.getThisCall().cancel();
+                        toRemove.add(uplodFileState);
+                    }
+                }
+            }
+            uplodFileStates.removeAll(toRemove);
+        }
+        runOnUiThread(() -> {
+            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 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); // 鏇存柊瀵瑰簲鐨勯」
+                        }
+                    }
+
+                }
+            }
+        });
+    }
+
+    /**
+     * 涓婃姤澶勭悊缁撴灉
+     */
+    private void postData() {
+        AddProcessingRequest result = new AddProcessingRequest();
+        result.setImages(uplodFileStates);
+        result.setContent(binding.contentET.getText().toString());
+        result.setInspectorId(MyApplication.myApplication.userId);
+        result.setWorkOrderId(workOrderId);
+        result.setCompleteTime(com.dayu.pipirrapp.utils.DateUtils.getNowDateToMMStr());
+        if (latLonBean != null) {
+            result.setLat(String.valueOf(latLonBean.getLatitude()));
+            result.setLng(String.valueOf(latLonBean.getLongitude()));
+        }
+        ApiManager.getInstance().requestPostHideLoading(this, BASE_URL + "/app/workOrder/addProcessingResult", InsectionResult.class, result.toMap(result), new SubscriberListener<BaseResponse<List<InsectionResult>>>() {
+            @Override
+            public void onNext(BaseResponse<List<InsectionResult>> t) {
+                try {
+                    if (t.isSuccess()) {
+                        ToastUtil.showToastLong(OrderDealActivity.this, "涓婃姤鎴愬姛");
+                        setResult(OrderFragment.RESULT_REFRESH);
+                        OrderDealActivity.this.finish();
+                    } else {
+
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    CrashReport.postCatchedException(e);
+                }
+
+            }
+        });
+    }
+
+    /**
+     * 寮�濮嬪畾浣嶇浉鍏抽�昏緫
+     */
+    private void startLocation() {
+        ServiceUtils.startLocationService(this,true);
+        //鑾峰彇瀹氫綅鏈嶅姟浼犺繃鏉ョ殑鍧愭爣鐐�
+        LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver);
+    }
+
+
+    @Override
+    protected void onDestroy() {
+        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);
+    }
 }

--
Gitblit v1.8.0