From 2fb397e4a31d14880ed2524f898ae67a0d664c06 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期二, 17 十二月 2024 11:24:29 +0800
Subject: [PATCH] 1.在地图中心显示中心点。 2.优化地图覆盖物显示,使显示的图标正对坐标。 3.优化地图覆盖物文字居中显示。
---
app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java | 247 +++++++++++++++++++++++++++++++++++++------------
1 files changed, 186 insertions(+), 61 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 cebbdd9..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,48 +1,63 @@
package com.dayu.pipirrapp.activity;
+import static com.dayu.pipirrapp.net.Constants.BASE_URL;
+
import android.content.Context;
import android.content.Intent;
-import android.net.Uri;
import android.os.Bundle;
+import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
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.PictureMimeType;
import com.luck.picture.lib.config.SelectMimeType;
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.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 com.tencent.bugly.crashreport.CrashReport;
-import java.io.File;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
-import top.zibin.luban.CompressionPredicate;
-import top.zibin.luban.Luban;
-import top.zibin.luban.OnNewCompressListener;
-import top.zibin.luban.OnRenameListener;
+import retrofit2.Call;
/**
* OrderDealDetailActivity -
@@ -53,7 +68,7 @@
* @since 2024-11-27
*/
public class OrderDealActivity extends BaseActivity {
- private String TAG = "OrderDealActivity";
+ private final String TAG = "OrderDealActivity";
ActivityOrderDealBinding binding;
RecyclerView mRecyclerView;
AddPictureAdapter mAdapter;
@@ -62,14 +77,30 @@
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();
}
@@ -104,6 +135,33 @@
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, "璇疯緭鍏ュ弽棣堝唴瀹�");
}
});
}
@@ -150,6 +208,7 @@
@Override
public void onPreviewDelete(int position) {
+ deleteItem(position);
mAdapter.remove(position);
mAdapter.notifyItemRemoved(position);
}
@@ -166,6 +225,13 @@
* @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())) {
@@ -194,66 +260,125 @@
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());
+ 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 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();
+ 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