From 4f7f99c6ea914bcd38de78bd8371be566026b905 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 26 二月 2025 15:54:14 +0800
Subject: [PATCH] -为按钮和列表项添加波纹效果,以获得更好的视觉反馈 -改进MapFragment中的底部布局动画 -在MapFragment中添加设备状态和RTU地址显示 -更新BaseListResult以支持泛型类型 -为设备数据添加IntakeListResult和IntakeResult -通过数据库支持增强标记位置更新功能 -添加电话拨号意图以分隔标记详细信息 -通过过期检查改进磁贴缓存 -添加问题报告的确认对话框 -更新登录活动以限制用户名长度 -为波纹效果和UI元素添加新颜色 -重构XML布局以使用新的波纹图 -改进MapFragment中的错误处理和用户反馈
---
app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java | 221 +++++++++++++++++++++++++------------------------------
1 files changed, 100 insertions(+), 121 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 58a4ea8..3ff4f31 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
@@ -4,8 +4,6 @@
import android.content.Context;
import android.content.Intent;
-import android.net.Uri;
-import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
@@ -22,48 +20,46 @@
import com.dayu.pipirrapp.MyApplication;
import com.dayu.pipirrapp.adapter.AddPictureAdapter;
import com.dayu.pipirrapp.bean.db.LatLonBean;
-import com.dayu.pipirrapp.bean.net.AddProcessingResult;
+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.service.MyLocationService;
+import com.dayu.pipirrapp.tool.FileUploadUtils;
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.loper7.date_time_picker.DateTimeConfig;
+import com.loper7.date_time_picker.dialog.CardDatePickerDialog;
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.HashMap;
import java.util.List;
-import java.util.Set;
+import java.util.Map;
-import top.zibin.luban.CompressionPredicate;
-import top.zibin.luban.Luban;
-import top.zibin.luban.OnNewCompressListener;
-import top.zibin.luban.OnRenameListener;
+import retrofit2.Call;
/**
* OrderDealDetailActivity -
@@ -74,18 +70,21 @@
* @since 2024-11-27
*/
public class OrderDealActivity extends BaseActivity {
- private String TAG = "OrderDealActivity";
+ private final String TAG = "OrderDealActivity";
ActivityOrderDealBinding binding;
RecyclerView mRecyclerView;
AddPictureAdapter mAdapter;
int maxSelectNum = 10;//鏈�澶х収鐗�
int maxSelectVideoNum = 0;//鏈�澶ц棰�
+ int videoMaxSecond = 60;
private final List<LocalMedia> mData = new ArrayList<>();
private ActivityResultLauncher<Intent> launcherResult;
private ImageEngine imageEngine;
- List<UplodFileState> uplodFileStates = new ArrayList<>();
+ // List<UplodFileState> uplodFileStates = new ArrayList<>();
+ Map<String, UplodFileState> uplodFileStates = new HashMap<>();
String workOrderId;
LatLonBean latLonBean;
+ String strCompleteTime;
/**
* 瀹氫綅鐩戝惉
@@ -93,6 +92,7 @@
private Observer<Object> locationObserver = new Observer<Object>() {
@Override
public void onChanged(Object o) {
+ MyLog.d("OrderDealActivity>>>locationObserver>>");
latLonBean = (LatLonBean) o;
}
};
@@ -111,6 +111,29 @@
void initView() {
new TitleBar(this).setTitleText("澶勭悊宸ュ崟").setLeftIco().setLeftIcoListening(v -> OrderDealActivity.this.finish());
+ binding.timeLL.setOnClickListener(v -> {
+ long time = System.currentTimeMillis();
+ List<Integer> list = new ArrayList<>();
+ list.add(DateTimeConfig.YEAR);
+ list.add(DateTimeConfig.MONTH);
+ list.add(DateTimeConfig.DAY);
+ list.add(DateTimeConfig.HOUR);
+ list.add(DateTimeConfig.MIN);
+ new CardDatePickerDialog.Builder(this)
+ .setTitle("閫夋嫨澶勭悊鏃堕棿")
+ .setOnChoose("纭畾", aLong -> {
+ //aLong = millisecond
+ strCompleteTime = com.dayu.pipirrapp.utils.DateUtils.formatTimestamp(aLong);
+ binding.timeData.setText(strCompleteTime);
+ return null;
+ })
+ .showBackNow(true)
+ .setDefaultTime(time)
+ .setMaxTime(time)
+ .setMinTime(time - 365L * 24 * 60 * 60 * 1000) // 璁剧疆鏈�灏忔椂闂翠负涓�骞村墠
+ .setDisplayType(list)
+ .build().show();
+ });
mRecyclerView = binding.recycler;
FullyGridLayoutManager manager = new FullyGridLayoutManager(this,
4, GridLayoutManager.VERTICAL, false);
@@ -121,7 +144,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,10 +164,20 @@
//娣诲姞鍥剧墖
mOpenPicture();
}
+
+ @Override
+ public void onDeleteClick(int position) {
+ deleteItem(position);
+ }
+
+ @Override
+ public void onReUpload(UplodFileState uplodFileState) {
+ FileUploadUtils.uploadFile(OrderDealActivity.this, uplodFileState, uplodFileStates, mAdapter);
+ }
});
binding.dealButton.setOnClickListener(v -> {
boolean isAllPost = true;
- for (UplodFileState imgData : uplodFileStates) {
+ for (UplodFileState imgData : uplodFileStates.values()) {
if (imgData.getState() == 0) {
isAllPost = false;
}
@@ -172,12 +205,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);
@@ -208,6 +249,7 @@
@Override
public void onPreviewDelete(int position) {
+ deleteItem(position);
mAdapter.remove(position);
mAdapter.notifyItemRemoved(position);
}
@@ -224,10 +266,6 @@
* @param result
*/
private void analyticalSelectResults(ArrayList<LocalMedia> result) {
- Set<String> existingPaths = new HashSet<>();
- for (UplodFileState uplodData : uplodFileStates) {
- existingPaths.add(uplodData.getFilePath());
- }
for (LocalMedia media : result) {
if (media.getWidth() == 0 || media.getHeight() == 0) {
if (PictureMimeType.isHasImage(media.getMimeType())) {
@@ -256,108 +294,27 @@
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(media.getRealPath());
- uplodFileStates.add(uplodFileState);
- // 鎵ц涓婁紶鍥剧墖鐨勬搷浣�
- uplodeImg(uplodFileState);
- }
-
-
+ Log.i(TAG, "鎵╁睍鍚�: " + media.getMimeType());
+ FileUploadUtils.creatAndUploadFile(this, media, uplodFileStates, mAdapter);
}
- 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());
-
- }
- });
+ // 鑾峰彇 result 涓病鏈夎�� uplodFileStates 涓湁鐨勫湴鍧�
+ FileUploadUtils.cancelRemovedUploads(result, uplodFileStates);
+ // 鏇存柊UI
+ FileUploadUtils.updateUI(result, mAdapter);
}
- /**
- * 鑷畾涔夊浘鐗囧帇缂�
- */
- 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 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() {
- AddProcessingResult result = new AddProcessingResult();
+ 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());
+ result.setCompleteTime(strCompleteTime);
if (latLonBean != null) {
result.setLat(String.valueOf(latLonBean.getLatitude()));
result.setLng(String.valueOf(latLonBean.getLongitude()));
@@ -368,6 +325,7 @@
try {
if (t.isSuccess()) {
ToastUtil.showToastLong(OrderDealActivity.this, "涓婃姤鎴愬姛");
+ setResult(OrderFragment.RESULT_REFRESH);
OrderDealActivity.this.finish();
} else {
@@ -385,14 +343,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);
}
@@ -402,5 +353,33 @@
protected void onDestroy() {
super.onDestroy();
LiveEventBus.get(CommonKeyName.locationData).removeObserver(locationObserver);
+ FileUploadUtils.cancelAllCall(uplodFileStates);
+ }
+
+ /**
+ * 棰勮鍜屽浘鐗囧垪琛ㄥ垹闄ゅ浘鐗囨椂澶勭悊鍒犻櫎浜嬩欢
+ */
+ private void deleteItem(int position) {
+ LocalMedia localMedia = mAdapter.getData().get(position);
+ String path;
+ UplodFileState uplodFileState;
+ if (TextUtils.isEmpty(localMedia.getCompressPath())) {
+ uplodFileState = uplodFileStates.get(localMedia.getRealPath());
+ } else {
+ uplodFileState = uplodFileStates.get(localMedia.getCompressPath());
+ }
+ if (uplodFileState != null) {
+ path = uplodFileState.getFilePath();
+ try {
+ Call mCall = uplodFileStates.get(path).getThisCall();
+ if (mCall != null) {
+ mCall.cancel();
+ MyLog.d("progressRequestBody>>>" + "cancel銆嬨�嬨�媝ath:" + path);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ uplodFileStates.remove(path);
+ }
}
}
--
Gitblit v1.8.0