app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/pipirrapp/adapter/OrderAdapter.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/pipirrapp/bean/net/OrderListResult.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/dayu/pipirrapp/utils/CommonKeyName.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/layout/activity_order_deal.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/layout/fragment_order.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/layout/item_order.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
app/src/main/java/com/dayu/pipirrapp/activity/MainActivity.java
@@ -1,12 +1,24 @@ package com.dayu.pipirrapp.activity; 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.os.Build; import android.os.Bundle; import android.os.VibrationEffect; import android.os.Vibrator; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.NotificationCompat; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; @@ -15,6 +27,7 @@ import com.dayu.pipirrapp.R; import com.dayu.pipirrapp.adapter.TabAdapter; import com.dayu.pipirrapp.bean.db.TagBean; import com.dayu.pipirrapp.bean.net.OrderDetailResult; import com.dayu.pipirrapp.dao.DaoSingleton; import com.dayu.pipirrapp.databinding.ActivityMainBinding; import com.dayu.pipirrapp.fragment.MapFragment; @@ -36,11 +49,12 @@ * 首页 */ public class MainActivity extends AppCompatActivity { private static final String CHANNEL_ID = "order_channel"; private ActivityMainBinding binding; private List<Fragment> fragments = new ArrayList<>(); private long mExitTime; MqttManager mqttManager; private Map<String, String> workerIddata = new HashMap<>(); public volatile static Map<String, String> workerIddata = new HashMap<>(); private enum Tab { @@ -77,16 +91,6 @@ } } }); //mq传来的消息 LiveEventBus.get(CommonKeyName.MQTTData).observeForever(new Observer<Object>() { @Override public void onChanged(Object o) { workerIddata.put((String) o, (String) o); binding.redDotImg.setVisibility(View.VISIBLE); } }); LiveEventBus.get(CommonKeyName.RedLotRefresh).observeForever(new Observer<Object>() { @Override public void onChanged(Object o) { @@ -101,6 +105,19 @@ binding.redDotImg.setVisibility(View.GONE); } } } }); LiveEventBus.get(CommonKeyName.CreateNotification).observeForever(new Observer<Object>() { @Override public void onChanged(Object o) { if (o instanceof OrderDetailResult) { OrderDetailResult orderDetailResult = ((OrderDetailResult) o); workerIddata.put(orderDetailResult.getWorkOrderId(), orderDetailResult.getWorkOrderId()); binding.redDotImg.setVisibility(View.VISIBLE); creatOrderNotification(orderDetailResult.getWorkOrderId().hashCode(), orderDetailResult.getTaskType(), orderDetailResult.getWorkOrderId()); } } }); @@ -130,7 +147,7 @@ binding.viewPager.setAdapter(adapter); binding.viewPager.setCurrentItem(1, false); // 默认显示地图页 binding.viewPager.setOffscreenPageLimit(fragments.size()); binding.viewPager.setUserInputEnabled(false); } @Override @@ -222,5 +239,55 @@ NetUtils.unregisterReceiver(this); } /** * 创建工单提示通知 * * @param notifucId * @param data */ private void creatOrderNotification(int notifucId, String data, String workOrderId) { NotificationManager notificationManager = (NotificationManager) 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, OrderDetailActivity.class); notificationIntent.putExtra("workOrderId", workOrderId); int requestCode = workOrderId.hashCode(); // 使用workOrderId的哈希码作为requestCode PendingIntent pendingIntent = PendingIntent.getActivity(this, requestCode, notificationIntent, PendingIntent.FLAG_MUTABLE); // 创建震动效果 // 获取 Vibrator 系统服务 Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); long[] vibrationPattern = {0, 1000, 500, 1000}; // 震动模式:等待0ms,震动1000ms,等待500ms,震动1000ms int repeat = -1; // 不重复 // 对于Android 26及以上版本,使用VibrationEffect if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { VibrationEffect effect = VibrationEffect.createWaveform(vibrationPattern, repeat); vibrator.vibrate(effect); } else { // 对于Android 25及以下版本,使用旧的vibrate方法 vibrator.vibrate(vibrationPattern, repeat); } Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle("新工单") .setContentText(data) .setSmallIcon(R.mipmap.ic_launcher) .setContentIntent(pendingIntent) .setAutoCancel(true) // 点击通知后自动消失 .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE)// 使用默认的音效和震动 .setVibrate(vibrationPattern) .build(); notificationManager.notify(notifucId, notification); } } app/src/main/java/com/dayu/pipirrapp/adapter/OrderAdapter.java
@@ -9,6 +9,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.dayu.pipirrapp.R; import com.dayu.pipirrapp.bean.net.OrderDetailResult; import com.dayu.pipirrapp.bean.net.OrderListResult; import com.dayu.pipirrapp.databinding.ItemNoMoreBinding; import com.dayu.pipirrapp.databinding.ItemOrderBinding; @@ -27,11 +28,11 @@ public class OrderAdapter extends BaseRecyclerAdapter<RecyclerView.ViewHolder> { List<OrderListResult.Data> recordsList; List<OrderDetailResult> recordsList; Context context; OrderFragment orderFragment; public OrderAdapter(Context context, List<OrderListResult.Data> recordsList, OrderFragment orderFragment) { public OrderAdapter(Context context, List<OrderDetailResult> recordsList, OrderFragment orderFragment) { this.context = context; this.recordsList = recordsList; this.orderFragment = orderFragment; @@ -54,7 +55,7 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { if (holder instanceof OrderAdapter.ViewHolder) { if (recordsList.size() > 0) { OrderListResult.Data record = recordsList.get(position); OrderDetailResult record = recordsList.get(position); ((OrderAdapter.ViewHolder) holder).getBinding().setData(record); switch (record.getProResultStateId()) { case 0://未上报 app/src/main/java/com/dayu/pipirrapp/bean/net/OrderListResult.java
@@ -17,7 +17,7 @@ int pageCurr; int pageSize; int pageTotal; List<Data> obj; List<OrderDetailResult> obj; public int getItemTotal() { return itemTotal; @@ -51,178 +51,15 @@ this.pageTotal = pageTotal; } public List<Data> getObj() { public List<OrderDetailResult> getObj() { return obj; } public void setObj(List<Data> obj) { public void setObj(List<OrderDetailResult> obj) { this.obj = obj; } public class Data { public String workOrderId;//工单ID public String dispatcherId;//派单人ID public String dispatcher;//派单人姓名 public String inspectorId;//巡检员ID public String inspector;//巡检员姓名 public String taskType;//任务类型 public String taskContent;//任务内容 public String completeCriteria;//完成标准 public String deadLine;//要求完成时间 public String clientReportId;//农户问题上报ID public String inspectorReportId;//巡检员问题上报ID public String completeTime;//任务完成时间 public String dispatchTime;//派单时间 public int rejectTimes;//驳回次数 public String state;//工单状态 public String processingState;//处理状态 public String proResultId;//处理结果id public int proResultStateId;//状态 1-已上报,2-已通过,3-已驳回 public String getWorkOrderId() { return workOrderId; } public void setWorkOrderId(String workOrderId) { this.workOrderId = workOrderId; } public String getDispatcherId() { return dispatcherId; } public void setDispatcherId(String dispatcherId) { this.dispatcherId = dispatcherId; } public String getDispatcher() { return dispatcher; } public void setDispatcher(String dispatcher) { this.dispatcher = dispatcher; } public String getInspectorId() { return inspectorId; } public void setInspectorId(String inspectorId) { this.inspectorId = inspectorId; } public String getInspector() { return inspector; } public void setInspector(String inspector) { this.inspector = inspector; } public String getTaskType() { return taskType; } public void setTaskType(String taskType) { this.taskType = taskType; } public String getTaskContent() { return taskContent; } public void setTaskContent(String taskContent) { this.taskContent = taskContent; } public String getCompleteCriteria() { return completeCriteria; } public void setCompleteCriteria(String completeCriteria) { this.completeCriteria = completeCriteria; } public String getDeadLine() { return deadLine; } public void setDeadLine(String deadLine) { this.deadLine = deadLine; } public String getClientReportId() { return clientReportId; } public void setClientReportId(String clientReportId) { this.clientReportId = clientReportId; } public String getInspectorReportId() { return inspectorReportId; } public void setInspectorReportId(String inspectorReportId) { this.inspectorReportId = inspectorReportId; } public String getCompleteTime() { return completeTime; } public void setCompleteTime(String completeTime) { this.completeTime = completeTime; } public String getDispatchTime() { return dispatchTime; } public void setDispatchTime(String dispatchTime) { this.dispatchTime = dispatchTime; } public int getRejectTimes() { return rejectTimes; } public void setRejectTimes(int rejectTimes) { this.rejectTimes = rejectTimes; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getProcessingState() { return processingState; } public void setProcessingState(String processingState) { this.processingState = processingState; } public String getProResultId() { return proResultId; } public void setProResultId(String proResultId) { this.proResultId = proResultId; } public int getProResultStateId() { return proResultStateId; } public void setProResultStateId(int proResultStateId) { this.proResultStateId = proResultStateId; } } } app/src/main/java/com/dayu/pipirrapp/fragment/OrderFragment.java
@@ -1,5 +1,7 @@ package com.dayu.pipirrapp.fragment; import static androidx.core.content.ContextCompat.getSystemService; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -9,6 +11,8 @@ 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; @@ -24,6 +28,7 @@ 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; @@ -55,7 +60,7 @@ */ 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; @@ -65,8 +70,8 @@ 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; @@ -114,7 +119,7 @@ @Override public void onChanged(Object o) { showRedlotDate = new Date().getTime(); binding.redDotImg.setVisibility(View.VISIBLE); // binding.redDotImg.setVisibility(View.VISIBLE); getMarkerData((String) o); } }); @@ -124,7 +129,7 @@ void initView() { //未完成 binding.manageStateProgress.setOnClickListener(v -> { binding.manageStateProgressRL.setOnClickListener(v -> { chooseStateView(true); state = STATE_UNDONE;//1 未开始 2 已完成 @@ -145,7 +150,7 @@ if (lastRefreshDate > showRedlotDate) { //消除红点 LiveEventBus.get(CommonKeyName.RedLotRefresh).post(true); binding.redDotImg.setVisibility(View.GONE); // binding.redDotImg.setVisibility(View.GONE); } recordsList.clear(); page = 0; @@ -162,11 +167,10 @@ 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(refreshlayout -> { // refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败 recordsListDone.clear(); page = 0; getMarkerData(refreshlayout, true, STATE_DONE); @@ -187,11 +191,11 @@ public void onResume() { super.onResume(); MyLog.d("OrderFragment>>onResume"); if (showRedlotDate > lastRefreshDate) { binding.redDotImg.setVisibility(View.VISIBLE); } else { binding.redDotImg.setVisibility(View.GONE); } // if (showRedlotDate > lastRefreshDate) { // binding.redDotImg.setVisibility(View.VISIBLE); // } else { // binding.redDotImg.setVisibility(View.GONE); // } } @Override @@ -223,19 +227,17 @@ @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().getPageTotal() == page) { 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()); @@ -276,59 +278,27 @@ if (state) { 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, 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, 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, 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); } } /** * 创建工单提示通知 * * @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); } /** * 获取工单详情 @@ -340,8 +310,12 @@ @Override public void onNext(BaseResponse<OrderDetailResult> t) { if (t.isSuccess()) { if (t.isSuccess()) { creatOrderNotification(workOrderId.hashCode(), t.getContent().getTaskType(), workOrderId); if (MainActivity.workerIddata != null) { if (!MainActivity.workerIddata.containsKey(workOrderId)) { LiveEventBus.get(CommonKeyName.CreateNotification).post(t.getContent()); recordsList.add(0, t.getContent()); mAdapter.notifyItemInserted(0); } } } } app/src/main/java/com/dayu/pipirrapp/utils/CommonKeyName.java
@@ -26,4 +26,7 @@ //刷新新工单小红点 public final static String RedLotRefresh="RedLotRefresh"; //创建通知 public final static String CreateNotification="CreateNotification"; } app/src/main/res/layout/activity_order_deal.xml
@@ -10,7 +10,7 @@ <variable name="data" type="com.dayu.pipirrapp.bean.net.OrderListResult.Data" /> type="com.dayu.pipirrapp.bean.net.OrderDetailResult" /> </data> <RelativeLayout app/src/main/res/layout/fragment_order.xml
@@ -149,6 +149,7 @@ android:orientation="horizontal"> <RelativeLayout android:id="@+id/manage_state_progressRL" android:layout_width="0dp" android:layout_height="match_parent" android:layout_margin="5dp" app/src/main/res/layout/item_order.xml
@@ -8,7 +8,7 @@ <variable name="data" type="com.dayu.pipirrapp.bean.net.OrderListResult.Data" /> type="com.dayu.pipirrapp.bean.net.OrderDetailResult" /> </data> <LinearLayout