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/fragment/OrderFragment.java | 215 ++++++++++++++++++++++++++++++++++-------------------
1 files changed, 138 insertions(+), 77 deletions(-)
diff --git a/app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java b/app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java
index 4ca4016..036ca77 100644
--- a/app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java
+++ b/app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java
@@ -1,37 +1,53 @@
package com.dayu.pipirrapp.fragment;
+import static androidx.core.content.ContextCompat.getSystemService;
+
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.Context;
import android.content.Intent;
import android.graphics.Typeface;
+import android.os.Build;
import android.os.Bundle;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.app.NotificationCompat;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.LinearLayoutManager;
+import com.dayu.pipirrapp.MyApplication;
import com.dayu.pipirrapp.R;
+import com.dayu.pipirrapp.activity.MainActivity;
import com.dayu.pipirrapp.activity.OrderDetailActivity;
import com.dayu.pipirrapp.adapter.OrderAdapter;
+import com.dayu.pipirrapp.bean.net.OrderDetailResult;
import com.dayu.pipirrapp.bean.net.OrderListResult;
-import com.dayu.pipirrapp.bean.net.WeatherResponse;
import com.dayu.pipirrapp.databinding.FragmentOrderBinding;
import com.dayu.pipirrapp.net.ApiManager;
import com.dayu.pipirrapp.net.BaseResponse;
import com.dayu.pipirrapp.net.Constants;
import com.dayu.pipirrapp.net.subscribers.SubscriberListener;
import com.dayu.pipirrapp.utils.CommonKeyName;
+import com.dayu.pipirrapp.utils.MyLog;
import com.dayu.pipirrapp.utils.ToastUtil;
import com.jeremyliao.liveeventbus.LiveEventBus;
import com.scwang.smart.refresh.footer.ClassicsFooter;
import com.scwang.smart.refresh.header.ClassicsHeader;
import com.scwang.smart.refresh.layout.api.RefreshLayout;
-import com.scwang.smart.refresh.layout.listener.OnLoadMoreListener;
-import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
import java.util.ArrayList;
+import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -43,18 +59,34 @@
* 澶囨敞锛氶椤�
*/
public class OrderFragment extends BaseFragment {
-
+ public static final int RESULT_REFRESH = 1001;
private final int STATE_DONE = 2;
private final int STATE_UNDONE = 1;
FragmentOrderBinding binding;
OrderAdapter mAdapter;
+ OrderAdapter mDoneAdapter;
int page = 1;
int pageSize = 10;
int state = 1;
- List<OrderListResult.Data> recordsListDone = new ArrayList<>();
- List<OrderListResult.Data> recordsList = new ArrayList<>();
+ List<OrderDetailResult> recordsListDone = new ArrayList<>();
+ List<OrderDetailResult> recordsList = new ArrayList<>();
+ RefreshLayout myRefreshLayout;
+ //鏈�鍚庡埛鏂扮殑鏃堕棿
+ long lastRefreshDate;
+ //鏄剧ず绾㈢偣鐨勬椂闂�
+ long showRedlotDate;
+
+
+ private ActivityResultLauncher<Intent> activityResultLauncher =
+ registerForActivityResult(
+ new ActivityResultContracts.StartActivityForResult(),
+ result -> {
+ if (result.getResultCode() == RESULT_REFRESH) {
+ myRefreshLayout.autoRefresh();
+ }
+ });
/**
* 璁剧疆澶╂皵鐩稿叧淇℃伅
@@ -82,57 +114,51 @@
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
binding = FragmentOrderBinding.inflate(inflater, container, false);
initView();
- //鑾峰彇瀹氫綅鏈嶅姟浼犺繃鏉ョ殑鍧愭爣鐐�
+ //mq浼犳潵鐨勬秷鎭�
LiveEventBus.get(CommonKeyName.MQTTData).observeForever(new Observer<Object>() {
@Override
public void onChanged(Object o) {
-
+ showRedlotDate = new Date().getTime();
+// binding.redDotImg.setVisibility(View.VISIBLE);
+ getMarkerData((String) o);
}
});
-
-
return binding.getRoot();
}
void initView() {
//鏈畬鎴�
- binding.manageStateProgress.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- chooseStateView(true);
- state = STATE_UNDONE;//1 鏈紑濮� 2 宸插畬鎴�
+ binding.manageStateProgressRL.setOnClickListener(v -> {
+ chooseStateView(true);
+ state = STATE_UNDONE;//1 鏈紑濮� 2 宸插畬鎴�
- }
});
//宸插畬鎴�
- binding.manageStateFinish.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- chooseStateView(false);
- state = STATE_DONE;//1 鏈紑濮� 2 宸插畬鎴�
- }
+ binding.manageStateFinish.setOnClickListener(v -> {
+ chooseStateView(false);
+ state = STATE_DONE;//1 鏈紑濮� 2 宸插畬鎴�
});
//鏈畬鎴�
- RefreshLayout myRefreshLayout = (RefreshLayout) binding.refreshLayout;
+ myRefreshLayout = (RefreshLayout) binding.refreshLayout;
myRefreshLayout.setRefreshHeader(new ClassicsHeader(this.getContext()));
myRefreshLayout.setRefreshFooter(new ClassicsFooter(this.getContext()));
- myRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
- @Override
- public void onRefresh(RefreshLayout refreshlayout) {
+ myRefreshLayout.setOnRefreshListener(refreshlayout -> {
// refreshlayout.finishRefresh(2000/*,false*/);//浼犲叆false琛ㄧず鍒锋柊澶辫触
- recordsList.clear();
- page = 0;
- getMarkerData(refreshlayout, true, STATE_UNDONE);
+ lastRefreshDate = new Date().getTime();
+ if (lastRefreshDate > showRedlotDate) {
+ //娑堥櫎绾㈢偣
+ LiveEventBus.get(CommonKeyName.RedLotRefresh).post(true);
+// binding.redDotImg.setVisibility(View.GONE);
}
+ recordsList.clear();
+ page = 0;
+ getMarkerData(refreshlayout, true, STATE_UNDONE);
});
- myRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
- @Override
- public void onLoadMore(RefreshLayout refreshlayout) {
- page = page + 1;
- getMarkerData(refreshlayout, false, STATE_UNDONE);
- }
+ myRefreshLayout.setOnLoadMoreListener(refreshlayout -> {
+ page = page + 1;
+ getMarkerData(refreshlayout, false, STATE_UNDONE);
});
mAdapter = new OrderAdapter(this.getContext(), recordsList, this);
@@ -141,36 +167,41 @@
binding.recyclerView.setAdapter(mAdapter);
getMarkerData(myRefreshLayout, true, STATE_UNDONE);
//宸插畬鎴�
- RefreshLayout myRefreshLayoutDone = (RefreshLayout) binding.refreshLayoutDone;
+ RefreshLayout myRefreshLayoutDone = binding.refreshLayoutDone;
myRefreshLayoutDone.setRefreshHeader(new ClassicsHeader(this.getContext()));
myRefreshLayoutDone.setRefreshFooter(new ClassicsFooter(this.getContext()));
- myRefreshLayoutDone.setOnRefreshListener(new OnRefreshListener() {
- @Override
- public void onRefresh(RefreshLayout refreshlayout) {
-// refreshlayout.finishRefresh(2000/*,false*/);//浼犲叆false琛ㄧず鍒锋柊澶辫触
- recordsList.clear();
- page = 0;
- getMarkerData(refreshlayout, true, STATE_DONE);
- }
+ myRefreshLayoutDone.setOnRefreshListener(refreshlayout -> {
+ recordsListDone.clear();
+ page = 0;
+ getMarkerData(refreshlayout, true, STATE_DONE);
});
- myRefreshLayoutDone.setOnLoadMoreListener(new OnLoadMoreListener() {
- @Override
- public void onLoadMore(RefreshLayout refreshlayout) {
- page = page + 1;
- getMarkerData(refreshlayout, false, STATE_DONE);
- }
+ myRefreshLayoutDone.setOnLoadMoreListener(refreshlayout -> {
+ page = page + 1;
+ getMarkerData(refreshlayout, false, STATE_DONE);
});
- mAdapter = new OrderAdapter(this.getContext(), recordsListDone, this);
+ mDoneAdapter = new OrderAdapter(this.getContext(), recordsListDone, this);
LinearLayoutManager layoutManagerDone = new LinearLayoutManager(this.getContext());
binding.recyclerViewDone.setLayoutManager(layoutManagerDone);
- binding.recyclerViewDone.setAdapter(mAdapter);
+ binding.recyclerViewDone.setAdapter(mDoneAdapter);
getMarkerData(myRefreshLayoutDone, true, 2);
}
@Override
- public void onStart() {
- super.onStart();
+ public void onResume() {
+ super.onResume();
+ MyLog.d("OrderFragment>>onResume");
+// if (showRedlotDate > lastRefreshDate) {
+// binding.redDotImg.setVisibility(View.VISIBLE);
+// } else {
+// binding.redDotImg.setVisibility(View.GONE);
+// }
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ MyLog.d("OrderFragment>>onPause");
}
/**
@@ -190,25 +221,23 @@
params.put("pageSize", pageSize);
params.put("pageCurr", page);
params.put("state", state);
-// params.put("inspectorId", MyApplication.myApplication.userId);
+ params.put("inspectorId", MyApplication.myApplication.userId);
ApiManager.getInstance().requestGetHideLoading(this.getContext(), Constants.BASE_URL + "/app/workOrder/getWorkOrders", OrderListResult.class, params, new SubscriberListener<BaseResponse<OrderListResult>>() {
@Override
public void onNext(BaseResponse<OrderListResult> t) {
if (t.isSuccess()) {
- if (t.isSuccess()) {
- if (t.getContent().getObj() != null && t.getContent().getObj().size() > 0) {
- if (state == STATE_UNDONE) {
- recordsList.addAll(t.getContent().getObj());
- } else {
- recordsListDone.addAll(t.getContent().getObj());
- }
- if (t.getContent().getObj().size() < pageSize) {
- refreshlayout.finishLoadMoreWithNoMoreData();
- }
+ if (t.getContent().getObj() != null && t.getContent().getObj().size() > 0) {
+ if (state == STATE_UNDONE) {
+ recordsList.addAll(t.getContent().getObj());
} else {
+ recordsListDone.addAll(t.getContent().getObj());
+ }
+ if (t.getContent().getPageTotal() == page) {
refreshlayout.finishLoadMoreWithNoMoreData();
}
+ } else {
+ refreshlayout.finishLoadMoreWithNoMoreData();
}
} else {
ToastUtil.showToast(OrderFragment.this.getContext(), t.getMsg());
@@ -219,16 +248,23 @@
public void onCloose() {
super.onCloose();
layoutFinish(refreshlayout, isRefresh);
- mAdapter.notifyDataSetChanged();
+ if (state == STATE_UNDONE) {
+ mAdapter.notifyDataSetChanged();
+ } else {
+ mDoneAdapter.notifyDataSetChanged();
+ }
}
});
}
- public void startDetail(String id) {
+ public void startDetail(String workOrderId, String proResultId) {
Intent intent = new Intent(this.getContext(), OrderDetailActivity.class);
- intent.putExtra("workOrderId", id);
- startActivity(intent);
+ intent.putExtra("workOrderId", workOrderId);
+ if (!TextUtils.isEmpty(proResultId)) {
+ intent.putExtra("proResultId", proResultId);
+ }
+ activityResultLauncher.launch(intent);
}
@@ -240,20 +276,23 @@
void chooseStateView(boolean state) {
if (state) {
- binding.manageStateProgress.setTextColor(getResources().getColor(R.color.title_color));
- binding.manageStateProgress.setBackground(getResources().getDrawable(R.drawable.ic_choose_bg_whit));
+ binding.manageStateProgress.setTextColor(getResources().getColor(R.color.title_color, null));
+ binding.manageStateProgress.setBackground(getResources().getDrawable(R.drawable.ic_choose_bg_whit, null));
+ binding.manageStateProgressRL.setBackground(getResources().getDrawable(R.drawable.ic_choose_bg_whit, null));
binding.manageStateProgress.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
- binding.manageStateFinish.setTextColor(getResources().getColor(R.color.black));
- binding.manageStateFinish.setBackground(getResources().getDrawable(R.color.title_choose_bg));
+ binding.manageStateFinish.setTextColor(getResources().getColor(R.color.black, null));
+ binding.manageStateFinish.setBackground(getResources().getDrawable(R.color.title_choose_bg, null));
binding.manageStateFinish.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
binding.refreshLayout.setVisibility(View.VISIBLE);
binding.refreshLayoutDone.setVisibility(View.GONE);
+
} else {
- binding.manageStateFinish.setTextColor(getResources().getColor(R.color.title_color));
- binding.manageStateFinish.setBackground(getResources().getDrawable(R.drawable.ic_choose_bg_whit));
+ binding.manageStateFinish.setTextColor(getResources().getColor(R.color.title_color, null));
+ binding.manageStateFinish.setBackground(getResources().getDrawable(R.drawable.ic_choose_bg_whit, null));
binding.manageStateFinish.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
- binding.manageStateProgress.setTextColor(getResources().getColor(R.color.black));
- binding.manageStateProgress.setBackground(getResources().getDrawable(R.color.title_choose_bg));
+ binding.manageStateProgress.setTextColor(getResources().getColor(R.color.black, null));
+ binding.manageStateProgress.setBackground(getResources().getDrawable(R.color.title_choose_bg, null));
+ binding.manageStateProgressRL.setBackground(getResources().getDrawable(R.color.title_choose_bg, null));
binding.manageStateProgress.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
binding.refreshLayout.setVisibility(View.GONE);
binding.refreshLayoutDone.setVisibility(View.VISIBLE);
@@ -261,4 +300,26 @@
}
+ /**
+ * 鑾峰彇宸ュ崟璇︽儏
+ */
+ private void getMarkerData(String workOrderId) {
+ Map<String, Object> params = new HashMap<>();
+ params.put("workOrderId", workOrderId);
+ ApiManager.getInstance().requestGetHideLoading(this.getContext(), Constants.BASE_URL + "/app/workOrder/getOneWorkOrder", OrderDetailResult.class, params, new SubscriberListener<BaseResponse<OrderDetailResult>>() {
+ @Override
+ public void onNext(BaseResponse<OrderDetailResult> t) {
+ if (t.isSuccess()) {
+ if (MainActivity.workerIddata != null) {
+ if (!MainActivity.workerIddata.containsKey(workOrderId)) {
+ LiveEventBus.get(CommonKeyName.CreateNotification).post(t.getContent());
+ recordsList.add(0, t.getContent());
+ mAdapter.notifyItemInserted(0);
+ }
+ }
+ }
+ }
+ });
+ }
+
}
--
Gitblit v1.8.0