diff --git a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckRecyclerFooter.java b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckRecyclerFooter.java
deleted file mode 100644
index f072f65a03..0000000000
--- a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckRecyclerFooter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.mogo.eagle.core.function.check.view;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-
-import com.mogo.eagle.core.function.check.R;
-
-import java.util.jar.Attributes;
-
-/**
- * @author liujing
- * @description 描述
- * @since: 10/13/21
- */
-public class CheckRecyclerFooter extends View {
-
- public CheckRecyclerFooter(Context context, AttributeSet attributes) {
- super(context, attributes);
- LayoutInflater.from(context).inflate(R.layout.check_recycler_footer, null);
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- }
-}
diff --git a/core/function-impl/mogo-core-function-hmi/build.gradle b/core/function-impl/mogo-core-function-hmi/build.gradle
index aa8fc72bc4..5fc71fcd47 100644
--- a/core/function-impl/mogo-core-function-hmi/build.gradle
+++ b/core/function-impl/mogo-core-function-hmi/build.gradle
@@ -48,6 +48,7 @@ dependencies {
implementation rootProject.ext.dependencies.androidxconstraintlayout
implementation rootProject.ext.dependencies.arouter
implementation rootProject.ext.dependencies.rxandroid
+ implementation rootProject.ext.dependencies.androidxrecyclerview
kapt rootProject.ext.dependencies.aroutercompiler
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficAdapter.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficAdapter.java
new file mode 100644
index 0000000000..2dc70cf41e
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficAdapter.java
@@ -0,0 +1,55 @@
+package com.mogo.eagle.core.function.hmi.ui.notice;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.mogo.eagle.core.function.hmi.R;
+
+/**
+ * @author liujing
+ * @description 描述
+ * @since: 10/26/21
+ */
+class NoticeTrafficAdapter extends RecyclerView.Adapter {
+ LayoutInflater mLayoutInflater;
+
+ public NoticeTrafficAdapter(@NonNull Context context) {
+ mLayoutInflater = LayoutInflater.from(context);
+ }
+
+ @NonNull
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View v = mLayoutInflater.inflate(R.layout.notice_traffice_info_list_adapter, parent,
+ false);
+ TrafficInfoHolder holder = new TrafficInfoHolder(v);
+ return holder;
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+
+ }
+
+ @Override
+ public int getItemCount() {
+ return 18;
+ }
+
+ public class TrafficInfoHolder extends RecyclerView.ViewHolder {
+ private TextView keyText;
+ private TextView valueText;
+
+ public TrafficInfoHolder(@NonNull View itemView) {
+ super(itemView);
+ keyText = itemView.findViewById(R.id.key_text_view);
+ valueText = itemView.findViewById(R.id.value_text_view);
+ }
+ }
+}
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficDialog.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficDialog.java
new file mode 100644
index 0000000000..8a14da7768
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficDialog.java
@@ -0,0 +1,50 @@
+package com.mogo.eagle.core.function.hmi.ui.notice;
+
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.mogo.eagle.core.function.hmi.R;
+import com.mogo.module.common.dialog.BaseFloatDialog;
+
+import java.util.List;
+
+/**
+ * @author liujing
+ * @description 描述
+ * @since: 10/26/21
+ */
+public class NoticeTrafficDialog extends BaseFloatDialog {
+ private Context mContext;
+ private RecyclerView mRecyclerView;
+
+ public NoticeTrafficDialog(@NonNull Context context) {
+ super(context);
+ mContext = context;
+ initView();
+ }
+
+ public NoticeTrafficDialog(@NonNull Context context, int themeResId) {
+ super(context, themeResId);
+ }
+
+ public void initView() {
+ mRecyclerView = findViewById(R.id.traffic_info_recyclerView);
+ //网格布局
+ GridLayoutManager layoutManager = new GridLayoutManager(mContext, 4);
+ mRecyclerView.setLayoutManager(layoutManager);
+ layoutManager.setOrientation(GridLayoutManager.VERTICAL);
+ //网格绘制
+ try {
+ NoticeTrafficInfoGridItemDivider gridLayoutDivider = new NoticeTrafficInfoGridItemDivider(1,
+ (mContext.getResources().getColor(R.color.notice_dialog_back)));
+ mRecyclerView.addItemDecoration(gridLayoutDivider);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ NoticeTrafficAdapter adapter = new NoticeTrafficAdapter(mContext);
+ mRecyclerView.setAdapter(adapter);
+ }
+}
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficInfoGridItemDivider.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficInfoGridItemDivider.java
new file mode 100644
index 0000000000..fb1e7dba89
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficInfoGridItemDivider.java
@@ -0,0 +1,165 @@
+package com.mogo.eagle.core.function.hmi.ui.notice;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.GradientDrawable;
+import android.view.View;
+
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.recyclerview.widget.StaggeredGridLayoutManager;
+
+/**
+ * @author liujing
+ * @description 网格布局网格绘制类
+ * @since: 9/22/21
+ */
+public class NoticeTrafficInfoGridItemDivider extends RecyclerView.ItemDecoration {
+ private String TAG = getClass().getSimpleName();
+ private static final int[] ATTRS = new int[]{android.R.attr.listDivider};
+ private Drawable divider;
+
+ public NoticeTrafficInfoGridItemDivider(Context context) {
+ final TypedArray a = context.obtainStyledAttributes(ATTRS);
+ divider = a.getDrawable(0);
+ a.recycle();
+ }
+
+ public NoticeTrafficInfoGridItemDivider(Drawable drawable) {
+ divider = drawable;
+ }
+
+ public NoticeTrafficInfoGridItemDivider(int height, int color) {
+ GradientDrawable shapeDrawable = new GradientDrawable();
+ shapeDrawable.setColor(color);
+ shapeDrawable.setShape(GradientDrawable.RECTANGLE);
+ shapeDrawable.setSize(height, height);
+ divider = shapeDrawable;
+ }
+
+
+ @Override
+ public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
+
+ drawHorizontal(c, parent);
+ drawVertical(c, parent);
+
+ }
+
+ private int getSpanCount(RecyclerView parent) {
+ // 列数
+ int spanCount = -1;
+ RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
+ if (layoutManager instanceof GridLayoutManager) {
+
+ spanCount = ((GridLayoutManager) layoutManager).getSpanCount();
+ } else if (layoutManager instanceof StaggeredGridLayoutManager) {
+ spanCount = ((StaggeredGridLayoutManager) layoutManager)
+ .getSpanCount();
+ }
+ return spanCount;
+ }
+
+ public void drawHorizontal(Canvas c, RecyclerView parent) {
+ int childCount = parent.getChildCount(); //获取可见item的数量
+ int spanCount = getSpanCount(parent);
+ for (int i = 0; i < childCount; i++) {
+ final View child = parent.getChildAt(i);
+ final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
+ .getLayoutParams();
+ final int left = child.getLeft() - params.leftMargin;
+ final int right = child.getRight() + params.rightMargin
+ + divider.getIntrinsicWidth();
+ final int top = child.getBottom() + params.bottomMargin;
+ final int bottom = top + divider.getIntrinsicHeight();
+ divider.setBounds(left, top, right, bottom);
+ divider.draw(c);
+ if (i < spanCount) { //画第一行顶部的分割线
+ drawHorizontalForFirstRow(c, child);
+ }
+ }
+ }
+
+ private void drawHorizontalForFirstRow(Canvas c, View child) {
+ final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
+ .getLayoutParams();
+ int left = child.getLeft() - params.leftMargin - divider.getIntrinsicWidth();
+ int top = child.getTop() - params.topMargin - divider.getIntrinsicHeight();
+ int right = child.getRight() + params.rightMargin + divider.getIntrinsicWidth();
+ int bottom = top + divider.getIntrinsicHeight();
+ divider.setBounds(left, top, right, bottom);
+ divider.draw(c);
+ }
+
+ private void drawVerticalForFirstColum(Canvas c, View child) {
+ final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
+ .getLayoutParams();//在父布局的
+ int left = child.getLeft() - params.leftMargin - divider.getIntrinsicWidth();
+ int top = child.getTop() - params.topMargin;
+ int right = child.getLeft() - params.leftMargin;
+ int bottom = top + child.getHeight() + divider.getIntrinsicHeight();
+ divider.setBounds(left, top, right, bottom);
+ divider.draw(c);
+ }
+
+ public void drawVertical(Canvas c, RecyclerView parent) {
+ final int childCount = parent.getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ final View child = parent.getChildAt(i);
+
+ final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
+ .getLayoutParams();
+ final int top = child.getTop() - params.topMargin;
+ final int bottom = child.getBottom() + params.bottomMargin;
+ final int left = child.getRight() + params.rightMargin;
+ final int right = left + divider.getIntrinsicWidth();
+ divider.setBounds(left, top, right, bottom);
+ divider.draw(c);
+ if (isFirstColum(parent, i, getSpanCount(parent))) { //画第一列左边分割线
+ drawVerticalForFirstColum(c, child);
+ }
+ }
+ }
+
+ //是否为第一列
+ private boolean isFirstColum(RecyclerView parent, int pos, int spanCount) {
+ RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
+ if (layoutManager instanceof GridLayoutManager) { //网格布局
+ if ((pos + 1) % spanCount == 1) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ //是否为第一行
+ private boolean isFirstRaw(int pos, int spanCount) {
+ if (pos < spanCount) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void getItemOffsets(Rect outRect, int itemPosition,
+ RecyclerView parent) {
+ int spanCount = getSpanCount(parent); //列数
+
+ if (itemPosition == 0) { //第一行第一个,四边都画
+ outRect.set(divider.getIntrinsicWidth(), divider.getIntrinsicHeight(),
+ divider.getIntrinsicWidth(), divider.getIntrinsicHeight());
+ } else if (isFirstRaw(itemPosition, spanCount)) { //第一行,画上下右三边
+ outRect.set(0, divider.getIntrinsicHeight(), divider.getIntrinsicWidth(), divider.getIntrinsicHeight());
+ } else if (isFirstColum(parent, itemPosition, spanCount)) { //第一列,画左右下三边
+ outRect.set(divider.getIntrinsicWidth(), 0, divider.getIntrinsicWidth(), divider.getIntrinsicHeight());
+ } else { //其他,画右下两边
+ outRect.set(0, 0, divider.getIntrinsicWidth(), divider.getIntrinsicHeight());
+ }
+
+ }
+
+}
+
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficInfoView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficInfoView.java
new file mode 100644
index 0000000000..d4c632b9d6
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeTrafficInfoView.java
@@ -0,0 +1,42 @@
+package com.mogo.eagle.core.function.hmi.ui.notice;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.mogo.eagle.core.function.hmi.R;
+
+/**
+ * @author liujing
+ * @description 交通事故任务详情
+ * @since: 10/26/21
+ */
+public class NoticeTrafficInfoView extends RecyclerView {
+ private int maxHeight = (int) getContext().getResources().getDimension(R.dimen.notice_traffic_info_width);
+ private int maxWeight = (int) getContext().getResources().getDimension(R.dimen.notice_traffic_info_height);
+
+ public NoticeTrafficInfoView(@NonNull Context context) {
+ super(context);
+ }
+
+ public NoticeTrafficInfoView(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public NoticeTrafficInfoView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ protected void onMeasure(int widthSpec, int heightSpec) {
+ super.onMeasure(widthSpec, heightSpec);
+ int limitHeight = getMeasuredHeight();
+ if (getMeasuredHeight() > maxHeight) {
+ limitHeight = maxHeight;
+ }
+ setMeasuredDimension(maxWeight, limitHeight);
+ }
+}
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/notice_push_item_background.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/notice_push_item_background.xml
new file mode 100644
index 0000000000..c190bbd78e
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/notice_push_item_background.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_traffic_police.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_traffic_police.xml
index b3c45c3e42..9968c19c15 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_traffic_police.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_dialog_traffic_police.xml
@@ -30,7 +30,28 @@
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_traffice_info_list_adapter.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_traffice_info_list_adapter.xml
new file mode 100644
index 0000000000..fe5aeaf134
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/notice_traffice_info_list_adapter.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values-xhdpi-2560x1440/color.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values-xhdpi-2560x1440/color.xml
index 3c0fb558fb..5caff3edca 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/values-xhdpi-2560x1440/color.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values-xhdpi-2560x1440/color.xml
@@ -2,6 +2,8 @@
#2B6EFF
#1F9BFE
+ #5A8EFD
#E63B4577
#D5D5D4
+ #3B4577
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values-xhdpi-2560x1440/dimens.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values-xhdpi-2560x1440/dimens.xml
index 8734c2bd14..3e20cb1ce5 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/values-xhdpi-2560x1440/dimens.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values-xhdpi-2560x1440/dimens.xml
@@ -4,14 +4,27 @@
1200px
1400px
788px
+ 900px
+ 506px
1300px
1210px
+ 1160px
+ 290px
32px
+ 30px
+ 36px
+ 38px
42px
50px
52px
54px
56px
150px
+ 180px
+ 220px
+ 580px
+ 588px
+ 1066px
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml
index 3c0fb558fb..5caff3edca 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml
@@ -2,6 +2,8 @@
#2B6EFF
#1F9BFE
+ #5A8EFD
#E63B4577
#D5D5D4
+ #3B4577
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/dimens.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/dimens.xml
index 8734c2bd14..c2347e1dec 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/dimens.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/dimens.xml
@@ -4,14 +4,28 @@
1200px
1400px
788px
+ 900px
+ 506px
1300px
1210px
+ 1160px
+ 290px
+
32px
+ 30px
+ 36px
+ 38px
42px
50px
52px
54px
56px
150px
+ 180px
+ 220px
+ 580px
+ 588px
+ 1066px
+
\ No newline at end of file
diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/notice/NoticeInfo.java b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/notice/NoticeInfo.java
new file mode 100644
index 0000000000..024dba8d76
--- /dev/null
+++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/notice/NoticeInfo.java
@@ -0,0 +1,67 @@
+package com.mogo.eagle.core.data.notice;
+
+import java.io.Serializable;
+
+/**
+ * @author liujing
+ * @description 交通事故任务详情数据bean
+ * @since: 10/26/21
+ */
+public class NoticeInfo implements Serializable {
+ private String infoId;//事故id
+ private long dataCreateTime;//事故发生时间
+ private long dataHandleTime;//事故处理时间
+ private String operaStatus;//事故状态
+ private String reason;//事故原因
+
+ public String getInfoId() {
+ return infoId;
+ }
+
+ public void setInfoId(String infoId) {
+ this.infoId = infoId;
+ }
+
+ public long getDataCreateTime() {
+ return dataCreateTime;
+ }
+
+ public void setDataCreateTime(long dataCreateTime) {
+ this.dataCreateTime = dataCreateTime;
+ }
+
+ public long getDataHandleTime() {
+ return dataHandleTime;
+ }
+
+ public void setDataHandleTime(long dataHandleTime) {
+ this.dataHandleTime = dataHandleTime;
+ }
+
+ public String getOperaStatus() {
+ return operaStatus;
+ }
+
+ public void setOperaStatus(String operaStatus) {
+ this.operaStatus = operaStatus;
+ }
+
+ public String getReason() {
+ return reason;
+ }
+
+ public void setReason(String reason) {
+ this.reason = reason;
+ }
+
+ @Override
+ public String toString() {
+ return "NoticeInfo{" +
+ "infoId='" + infoId + '\'' +
+ ", dataCreateTime=" + dataCreateTime +
+ ", dataHandleTime=" + dataHandleTime +
+ ", operaStatus='" + operaStatus + '\'' +
+ ", reason='" + reason + '\'' +
+ '}';
+ }
+}
diff --git a/core/mogo-core-res/src/main/function-hmi-res/drawable/notice_banner_default.png b/core/mogo-core-res/src/main/function-hmi-res/drawable/notice_banner_default.png
new file mode 100644
index 0000000000..a6aef500e9
Binary files /dev/null and b/core/mogo-core-res/src/main/function-hmi-res/drawable/notice_banner_default.png differ