From 798128053bb17ed293aa8d5424db3b5ed007d375 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期一, 23 十二月 2024 10:20:57 +0800
Subject: [PATCH] 1.优化订单列表框架,升级为viewPager2,提升性能。 2.添加收到新工单后的红点提醒。 3.修复查询数据为空时报错。 4.优化修改经纬度的流程。 5.修复mqtt的CLIENT_ID一致导致的连接错误。 6.修复收到新工单后点击消息通知栏跳转详情时不更新数据的bug。
---
app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java | 144 ++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 122 insertions(+), 22 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 68aa844..92c61ba 100644
--- a/app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java
+++ b/app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java
@@ -1,21 +1,32 @@
package com.dayu.pipirrapp.fragment;
+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.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.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.databinding.FragmentOrderBinding;
import com.dayu.pipirrapp.net.ApiManager;
@@ -23,6 +34,7 @@
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;
@@ -30,6 +42,7 @@
import com.scwang.smart.refresh.layout.api.RefreshLayout;
import java.util.ArrayList;
+import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -41,8 +54,8 @@
* 澶囨敞锛氶椤�
*/
public class OrderFragment extends BaseFragment {
-
-
+ public static final int RESULT_REFRESH = 1001;
+ private static final String CHANNEL_ID = "order_channel";
private final int STATE_DONE = 2;
private final int STATE_UNDONE = 1;
@@ -54,6 +67,21 @@
int state = 1;
List<OrderListResult.Data> recordsListDone = new ArrayList<>();
List<OrderListResult.Data> 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();
+ }
+ });
/**
* 璁剧疆澶╂皵鐩稿叧淇℃伅
@@ -81,12 +109,15 @@
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
binding = FragmentOrderBinding.inflate(inflater, container, false);
initView();
- //鑾峰彇瀹氫綅鏈嶅姟浼犺繃鏉ョ殑鍧愭爣鐐�
- LiveEventBus.get(CommonKeyName.MQTTData).observeForever(o -> {
-
+ //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();
}
@@ -104,12 +135,18 @@
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(refreshlayout -> {
// refreshlayout.finishRefresh(2000/*,false*/);//浼犲叆false琛ㄧず鍒锋柊澶辫触
+ 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);
@@ -147,8 +184,20 @@
@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");
}
/**
@@ -181,7 +230,7 @@
} else {
recordsListDone.addAll(t.getContent().getObj());
}
- if (t.getContent().getObj().size() < pageSize) {
+ if (t.getContent().getPageTotal() == page) {
refreshlayout.finishLoadMoreWithNoMoreData();
}
} else {
@@ -202,8 +251,6 @@
} else {
mDoneAdapter.notifyDataSetChanged();
}
-
-
}
});
@@ -215,7 +262,7 @@
if (!TextUtils.isEmpty(proResultId)) {
intent.putExtra("proResultId", proResultId);
}
- startActivity(intent);
+ activityResultLauncher.launch(intent);
}
@@ -227,20 +274,20 @@
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.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.manageStateProgress.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
binding.refreshLayout.setVisibility(View.GONE);
binding.refreshLayoutDone.setVisibility(View.VISIBLE);
@@ -248,4 +295,57 @@
}
+ /**
+ * 鍒涘缓宸ュ崟鎻愮ず閫氱煡
+ *
+ * @param notifucId
+ * @param data
+ */
+ private void creatOrderNotification(int notifucId, String data, String workOrderId) {
+ NotificationManager notificationManager = (NotificationManager) requireContext().getSystemService(Context.NOTIFICATION_SERVICE);
+ // 鍒涘缓NotificationChannel锛堜粎閽堝Android O鍙婁互涓婄増鏈級
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ CharSequence name = getString(R.string.channel_name);
+ String description = getString(R.string.channel_description);
+ int importance = NotificationManager.IMPORTANCE_DEFAULT;
+ NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
+ channel.setDescription(description);
+ // 娉ㄥ唽閫氶亾
+ notificationManager.createNotificationChannel(channel);
+ }
+
+ Intent notificationIntent = new Intent(this.getContext(), OrderDetailActivity.class);
+ notificationIntent.putExtra("workOrderId", workOrderId);
+ int requestCode = workOrderId.hashCode(); // 浣跨敤workOrderId鐨勫搱甯岀爜浣滀负requestCode
+ PendingIntent pendingIntent = PendingIntent.getActivity(this.getContext(), requestCode, notificationIntent, PendingIntent.FLAG_MUTABLE);
+ Notification notification = new NotificationCompat.Builder(this.getContext(), CHANNEL_ID)
+ .setContentTitle("鏂板伐鍗�")
+ .setContentText(data)
+ .setSmallIcon(R.mipmap.ic_launcher)
+ .setContentIntent(pendingIntent)
+ .setAutoCancel(true) // 鐐瑰嚮閫氱煡鍚庤嚜鍔ㄦ秷澶�
+ .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE)// 浣跨敤榛樿鐨勯煶鏁堝拰闇囧姩
+ .build();
+ notificationManager.notify(notifucId, notification);
+
+ }
+
+ /**
+ * 鑾峰彇宸ュ崟璇︽儏
+ */
+ 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 (t.isSuccess()) {
+ creatOrderNotification(workOrderId.hashCode(), t.getContent().getTaskType(), workOrderId);
+ }
+ }
+ }
+ });
+ }
+
}
--
Gitblit v1.8.0