移动检测模块,并优化说明文档

Signed-off-by: 董宏宇 <martindhy@gmail.com>
This commit is contained in:
董宏宇
2021-09-17 20:24:19 +08:00
parent 451eb965df
commit b4c3a01896
66 changed files with 47 additions and 39 deletions

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mogo.eagle.core.function.check">
<application>
<activity
android:name="com.mogo.eagle.core.function.check.view.CheckActivity"
android:launchMode="singleTask"
android:screenOrientation="landscape" />
</application>
</manifest>

View File

@@ -0,0 +1,90 @@
package com.mogo.eagle.core.function.check;
import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.eagle.core.utilcode.util.LogUtils;
import com.mogo.eagle.core.function.api.check.IMogoCheckListener;
import com.mogo.eagle.core.function.check.view.CheckActivity;
import com.mogo.service.MogoServicePaths;
import com.mogo.eagle.core.function.api.check.ICheckProvider;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* 鹰眼系统、自动驾驶系统 检测模块
*
* @date 4/21/21 3:39 PM
* 需求地址
* wikihttp://wiki.zhidaohulian.com/pages/viewpage.action?pageId=58204952
*/
@Route(path = MogoServicePaths.PATH_CHECK)
public class VehicleMonitoringManager implements ICheckProvider {
private static final String TAG = "VehicleMonitoringManager";
private Context mContext;
private final Map<String, CopyOnWriteArrayList> mListeners = new ConcurrentHashMap<>();
@Override
public void init(Context context) {
LogUtils.dTag(TAG, "初始化 CheckProvider 模块");
mContext = context;
}
@Override
public void registerVehicleMonitoringListener(String module, IMogoCheckListener listener) {
if (listener == null || module == null) {
LogUtils.dTag(TAG, "listener == null || intent == null");
return;
}
if (!mListeners.containsKey(module)) {
LogUtils.dTag(TAG, "intent==" + module + "listener" + listener);
mListeners.put(module, new CopyOnWriteArrayList<>());
}
mListeners.get(module).add(listener);
}
@Override
public void unregisterListener(String module, IMogoCheckListener listener) {
if (mListeners.containsKey(module)) {
mListeners.get(module).remove(listener);
}
}
@Override
public void startCheckActivity(Context context) {
if (context != null) {
CheckActivity.start(context);
}
}
@Override
public void showCheckDialog(Context context) {
if (context != null) {
CheckActivity.showDialog(context);
}
}
@Override
public boolean checkMonitor(Context context) {
if (context != null) {
return CheckActivity.checkMonitor();
}
return false;
}
@Override
public void updateMonitoringStatus(String module, boolean hasError) {
List<IMogoCheckListener> listeners = mListeners.get(module);
if (listeners != null && !listeners.isEmpty()) {
for (IMogoCheckListener listener : listeners) {
if (listener != null) {
listener.updateMonitoringStatus(hasError);
}
}
}
}
}

View File

@@ -0,0 +1,19 @@
package com.mogo.eagle.core.function.check.api;
/**
* @author liujing
* @description 描述
* @since: 8/6/21
*/
public interface ICheckListener {
/**
* 工控机->鹰眼定位数据延时
*/
void getAutoLocationTimeCallbackDelayed(long time);
/**
* 工控机->鹰眼识别数据延时
*/
void getAutoDataCallbackDelayed(long time);
}

View File

@@ -0,0 +1,23 @@
package com.mogo.eagle.core.function.check.api;
/**
* @author xiaoyuzhou
* @date 2021/7/5 2:54 下午
* <p>
* 软件环境检测
* -----> 自动驾驶版本
* -----> 鹰眼版本
*/
public interface SoftCheckApi {
/**
* 检测「自动驾驶」版本
*/
void checkAutoPilotSoftVersion();
/**
* 检测「鹰眼」版本
*/
void checkEagleEyeSoftVersion();
}

View File

@@ -0,0 +1,133 @@
package com.mogo.eagle.core.function.check.model;
import java.io.Serializable;
import java.util.ArrayList;
/**
* @author liujing
* @description 描述
* @since: 7/28/21
*/
public class CheckItemInfo implements Serializable {
//view类型
private int style;
//view顶端标题
private String viewTitle;
//icon 下第一行title 自动驾驶软件\鹰眼系统
private String title;
private String value;
private ArrayList itemList;
//是否存在异常
private boolean usual;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public ArrayList getItemList() {
return itemList;
}
public void setItemList(ArrayList itemList) {
this.itemList = itemList;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public boolean isUsual() {
return usual;
}
public void setUsual(boolean usual) {
this.usual = usual;
}
public int getStyle() {
return style;
}
public void setStyle(int style) {
this.style = style;
}
public String getViewTitle() {
return viewTitle;
}
public void setViewTitle(String viewTitle) {
this.viewTitle = viewTitle;
}
@Override
public String toString() {
return "CheckItemInfo{" +
"style=" + style +
", viewTitle='" + viewTitle + '\'' +
", title='" + title + '\'' +
", value='" + value + '\'' +
", itemList=" + itemList +
", usual=" + usual +
'}';
}
public static class DetailItem implements Serializable {
private boolean usual;
private String title;
private String value;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public boolean isUsual() {
return usual;
}
public void setUsual(boolean usual) {
this.usual = usual;
}
@Override
public String toString() {
return "DetailItem{" +
"usual=" + usual +
", title='" + title + '\'' +
", value='" + value + '\'' +
'}';
}
}
public interface CheckAdapterStyleEnum {
int ITEM_TYPE_CHECK_TITLE = 0;
int ITEM_TYPE_CHECK_LIST = 1;
int ITEM_TYPE_CHECK_IMAGE = 2;
}
}

View File

@@ -0,0 +1,10 @@
package com.mogo.eagle.core.function.check.net;
/**
* @author liujing
* @description 描述
* @since: 8/13/21
*/
public class CheckApiServiceFactory {
}

View File

@@ -0,0 +1,17 @@
package com.mogo.eagle.core.function.check.net;
import android.database.Observable;
import java.util.Map;
import retrofit2.http.FieldMap;
import retrofit2.http.POST;
/**
* @author liujing
* @description 描述
* @since: 8/13/21
*/
public interface CheckApiServices {
@POST("/yycp-vehicle-management-service/monitor/reciveInfo")
Observable<CheckResultData> uploadCheckDetail(@FieldMap Map<String, String> param);
}

View File

@@ -0,0 +1,11 @@
package com.mogo.eagle.core.function.check.net;
import com.mogo.commons.data.BaseData;
/**
* @author liujing
* @description 描述
* @since: 8/13/21
*/
public class CheckResultData extends BaseData {
}

View File

@@ -0,0 +1,580 @@
package com.mogo.eagle.core.function.check.view;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import com.mogo.commons.voice.AIAssist;
import com.mogo.eagle.core.function.check.R;
import com.mogo.eagle.core.function.check.model.CheckItemInfo;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.view.ImageViewClipBounds;
import com.mogo.module.common.view.SpacesItemDecoration;
import com.mogo.module.service.receiver.MogoReceiver;
import com.mogo.utils.CommonUtils;
import com.mogo.utils.network.utils.NetworkStatusUtil;
import com.tencent.bugly.beta.Beta;
import com.tencent.bugly.beta.UpgradeInfo;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
/**
* @author liujing
* @description 车辆监控页面
* @since: 7/27/21
*/
public class CheckActivity extends AppCompatActivity {
private static final String TAG = "CheckActivity";
private RecyclerView mRecyclerView;
private static ArrayList dataArrayList = new ArrayList();
private static Context context;
private static NetworkStatusUtil.NetWorkStatus sNetWorkStatus;
private ImageView mImageView;
private static String packageName = "com.mogo.launcher.f";
//车模
private ImageView scanBottomCarImage;
//扫描束
private ImageView scanLineImage;
//车辆模型顶部色值加深车模
private ImageViewClipBounds scanTopImageView;
//车模顶部小部件图片
private ImageViewClipBounds tipsImageView;
//动画组
private AnimatorSet setAnimation = null;
private ValueAnimator mValueAnimator;
private float movement = 1162f;
//进度条
private ProgressBar mProgressBar;
private final static long DURATION_TIME = 3000;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_check);
initView();
}
/**
* 列表View初始化
*/
public void initView() {
setAnimation = new AnimatorSet();
mImageView = findViewById(R.id.btnBack);
scanBottomCarImage = findViewById(R.id.scan_car_image);
scanLineImage = findViewById(R.id.scan_line_image);
scanTopImageView = findViewById(R.id.scan_car_top_image);
tipsImageView = findViewById(R.id.scan_car_tips);
mProgressBar = findViewById(R.id.check_progress);
context = mImageView.getContext();
packageName = getPackageName(context);
mImageView.setOnClickListener(v -> {
finish();
});
//检测动画
animation();
//版本检测 和系统检查放在第二期
// versionCheckResult();
// //系统检测
// systemCheckResult();
//软件检测
software();
//硬件检测
hardware();
//根据以上4个结果插入第一个元素(自动驾驶车辆是否存在风险)
topListTitle();
mRecyclerView = findViewById(R.id.check_list);
mRecyclerView.setAdapter(new CheckAdapter(context, dataArrayList));
CheckLinearLayout linearLayoutManager =
new CheckLinearLayout(this, CheckLinearLayout.VERTICAL, false);
mRecyclerView.addItemDecoration(new SpacesItemDecoration((int) getResources().getDimension(R.dimen.check_item_space_vr)));
mRecyclerView.setLayoutManager(linearLayoutManager);
}
/**
* 自动驾驶状态下指标监测
*/
public static boolean checkMonitor() {
dataArrayList.clear();
Log.d(TAG, "checkMonitor");
//版本检测
// versionCheckResult();
// //系统检测
// systemCheckResult();
//软件检测
software();
//硬件检测
hardware();
//根据以上4个结果插入第一个元素(自动驾驶车辆是否存在风险)
topListTitle();
MogoApisHandler.getInstance().getApis().getCheckProvider().updateMonitoringStatus(MogoReceiver.ACTION_CHECK_VEHICLE_MONITORING,false);
return true;
}
/**
* 自动驾驶是否存在风险
*/
private static void topListTitle() {
ArrayList list = new ArrayList(1);
CheckItemInfo info = new CheckItemInfo();
info.setUsual(false);
info.setTitle("自动驾驶车辆存在风险");
info.setStyle(CheckItemInfo.CheckAdapterStyleEnum.ITEM_TYPE_CHECK_TITLE);
list.add(info);
dataArrayList.add(0, list);
}
/**
* @param context
* @return 当前应用的版本名称
*/
public static synchronized String getPackageName(Context context) {
try {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(
context.getPackageName(), 0);
Log.d(TAG, "包名:" + packageInfo.packageName);
return packageInfo.packageName;
} catch (Exception e) {
e.printStackTrace();
}
return "com.mogo.launcher.f";
}
/**
* **************************************************************************************检测动画
*/
public void animation() {
ObjectAnimator animatorX = ObjectAnimator.ofFloat(scanLineImage, "translationX", scanBottomCarImage.getWidth(), 0);
ObjectAnimator animatorAl = ObjectAnimator.ofFloat(scanLineImage, "alpha", 0, 1);
setAnimation.playTogether(animatorX, animatorAl);
setAnimation.setDuration(800);
setAnimation.start();
setAnimation.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
if (scanTopImageView != null) {
movement = (float) scanTopImageView.getWidth();
scanLineImage.setVisibility(View.VISIBLE);
scanTopImageView.setVisibility(View.VISIBLE);
tipsImageView.setVisibility(View.VISIBLE);
}
if (scanLineImage != null) {
scanLineImage
.animate()
.translationX(movement)
.setDuration(DURATION_TIME)
.setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
animatorScanCarBorder(true, scanTopImageView.getWidth());
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
}).start();
}
}
});
}
/**
* 扫描动画:实现扫描束位移+顶部深色车模及检测元件的显示
*/
public void animatorScanCarBorder(boolean show, int weight) {
if (show) {
mValueAnimator = ValueAnimator.ofInt(0, weight);
} else {
}
mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Rect rect = new Rect(0, 0, (int) mValueAnimator.getAnimatedValue(), scanTopImageView.getHeight());
setProgressBarRefresh((int) mValueAnimator.getAnimatedValue());
scanTopImageView.setClip(rect);
tipsImageView.setClip(rect);
}
});
mValueAnimator.setDuration(DURATION_TIME);
mValueAnimator.start();
}
/**
* 进度条状态刷新
*/
public void setProgressBarRefresh(int animateValue) {
if (mProgressBar != null) {
double scale = new BigDecimal((float) animateValue / scanBottomCarImage.getWidth())
.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue() * 100;
if (mProgressBar.getProgress() < 100) {
mProgressBar.setProgress((int) scale);
} else {
findViewById(R.id.animationLayout).setVisibility(View.GONE);
}
}
}
/**
* **************************************************************************************版本检测
*/
public static void versionCheckResult() {
ArrayList arrayVer = new ArrayList();
//adas 检测指标
//鹰眼当前版本
String verCodeStr = CommonUtils.getVersionName(context, true);
Log.d(TAG, "版本检测结果:鹰眼" + verCodeStr);
//测试数据
CheckItemInfo itemInfo = new CheckItemInfo();
itemInfo.setViewTitle("版本检测:");
itemInfo.setTitle("自动驾驶升级到\n 版本3.1.2.7");
if ("不是最新版本" != null) {
itemInfo.setUsual(false);
itemInfo.setValue("版本升级");
} else {
itemInfo.setUsual(true);
itemInfo.setValue("最新版本 无风险");
}
arrayVer.add(itemInfo);
CheckItemInfo yingyan = new CheckItemInfo();
UpgradeInfo upgradeInfo = Beta.getUpgradeInfo();
if (upgradeInfo == null) {
yingyan.setUsual(true);
yingyan.setTitle(" 鹰眼 \n版本" + verCodeStr);
yingyan.setValue("最新版本 无风险");
} else {
yingyan.setUsual(false);
yingyan.setTitle(" 鹰眼升级到 \n版本" + upgradeInfo.versionName);
yingyan.setValue("版本升级");
}
arrayVer.add(yingyan);
dataArrayList.add(arrayVer);
}
/**
* **************************************************************************************系统检测
*/
public static void systemCheckResult() {
ArrayList arrSys = new ArrayList();
//网络
netStatus();
//电量
float battery = CommonUtils.getBattery(context);
//cpu占比
double cpu = CommonUtils.getCPU(packageName);
//内存占比
double memory = CommonUtils.getMemory(packageName);
//风险状态
CheckItemInfo itemInfo = new CheckItemInfo();
itemInfo.setViewTitle("系统检测:");
itemInfo.setTitle("自动驾驶系统");
itemInfo.setUsual(false);
itemInfo.setValue("存在风险");
ArrayList list = new ArrayList();
//详细指标值
CheckItemInfo.DetailItem item = new CheckItemInfo.DetailItem();
item.setTitle("工控机链接状态");
item.setValue("断开");
list.add(item);
arrSys.add(itemInfo);
//鹰眼测试数据
CheckItemInfo yingyan = new CheckItemInfo();
yingyan.setTitle("鹰眼软件");
yingyan.setUsual(false);
yingyan.setValue("无风险");
CheckItemInfo.DetailItem netItem = new CheckItemInfo.DetailItem();
netItem.setTitle("网络状态");
netItem.setValue(String.valueOf(sNetWorkStatus.getSignalStrength()));
list.add(netItem);
CheckItemInfo.DetailItem batteryItem = new CheckItemInfo.DetailItem();
batteryItem.setTitle("电池状态");
batteryItem.setValue(String.valueOf(battery));
list.add(batteryItem);
CheckItemInfo.DetailItem cpuItem = new CheckItemInfo.DetailItem();
cpuItem.setTitle("CPU占比");
cpuItem.setValue(String.valueOf(cpu));
list.add(cpuItem);
CheckItemInfo.DetailItem memoryItem = new CheckItemInfo.DetailItem();
memoryItem.setTitle("内存占比");
memoryItem.setValue(String.valueOf(memory));
list.add(memoryItem);
yingyan.setItemList(list);
arrSys.add(yingyan);
dataArrayList.add(arrSys);
}
/**
* 网络
*/
public static NetworkStatusUtil.NetWorkStatus netStatus() {
//网络类型
sNetWorkStatus = NetworkStatusUtil.networkState(context);
//网络强度
if (sNetWorkStatus != null && sNetWorkStatus.getStatus() != null && sNetWorkStatus.getStatus() != "UNKNOWN") {
Log.d(TAG, "网络类型:" + sNetWorkStatus.getStatus() + "网络强度:" + sNetWorkStatus.getSignalStrength());
if (sNetWorkStatus.getSignalStrength() <= -90) {
AIAssist.getInstance(context).speakTTSVoice("网络信号差");
}
} else {
Log.d(TAG, "网络未连接");
AIAssist.getInstance(context).speakTTSVoice("网络未连接");
}
return sNetWorkStatus;
}
/**
* **************************************************************************************软件测试
* 自动驾驶侧:
* 1、车控节点
* <p>
* 2、轨迹地图加载节点
* <p>
* 3、轨迹规划节点
* <p>
* 4、定位转化节点
* <p>
* 5、融合节点
* <p>
* 6、yolov5节点包含红绿灯检测
* <p>
* 7、激光雷达渲染节点
* <p>
* 8、摄像头驱动节点
* <p>
* 9、gnss定位驱动节点
* <p>
* 10、中激光驱动节点
* <p>
* 11、左激光解码节点
* <p>
* 12、左激光驱动节点
* <p>
* 13、右激光解码节点
* <p>
* 14、右激光驱动节点
* <p>
* 15、监控节点
* <p>
* 16、通讯交互节点
* <p>
* 17、轨迹录制节点
* <p>
* 18、can车辆控制节点
* <p>
* 数据上报频率 什么数据的上报频率
* <p>
* 时延 工控机->云 工控机->鹰眼 什么数据的时延
*/
public static void software() {
ArrayList arrSoftware = new ArrayList();
CheckItemInfo itemInfo = new CheckItemInfo();
itemInfo.setViewTitle("软件检测:");
itemInfo.setTitle("自动驾驶系统");
itemInfo.setUsual(true);
itemInfo.setValue("无风险");
arrSoftware.add(itemInfo);
CheckItemInfo itemY = new CheckItemInfo();
itemY.setTitle("鹰眼软件");
itemY.setUsual(true);
itemY.setValue("无风险");
arrSoftware.add(itemY);
dataArrayList.add(arrSoftware);
time();
}
/**
* 时延
* 需要产品确认哪些指标? 定位+周边识别?
*/
public static long time() {
final long start = System.nanoTime();
long adasDataTime = TimeUnit.NANOSECONDS.toMillis((System.nanoTime() - start));
Log.i("ADAS数据延时", "接收数据 -> 发出 cost :" + adasDataTime + "ms");
return adasDataTime;
}
/**
* **************************************************************************************硬件测试
* 1、主激光雷达
* <p>
* 2、侧激光雷达-2个
* <p>
* 3、ADAS长焦摄像头-前
* <p>
* 4、ADAS广角摄像头-前
* <p>
* 5、ADAS标准摄像头-前
* <p>
* 6、ADAS广角摄像头-后
* <p>
* 7、RTK设备
* <p>
* 8、OBU设备
* <p>
* 9、路由器
*/
public static void hardware() {
ArrayList arrHardware = new ArrayList();
CheckItemInfo itemInfo = new CheckItemInfo();
itemInfo.setViewTitle("硬件检测:");
itemInfo.setTitle("自动驾驶系统");
itemInfo.setUsual(false);
ArrayList detailItem = new ArrayList();
CheckItemInfo.DetailItem padItem = new CheckItemInfo.DetailItem();
padItem.setTitle("Pad");
padItem.setValue("异常");
detailItem.add(padItem);
CheckItemInfo.DetailItem cameraTop = new CheckItemInfo.DetailItem();
cameraTop.setTitle("摄像头_top");
cameraTop.setValue("正常");
detailItem.add(cameraTop);
CheckItemInfo.DetailItem cameraMiddle = new CheckItemInfo.DetailItem();
cameraMiddle.setTitle("摄像头_Middle");
cameraMiddle.setValue("正常");
detailItem.add(cameraMiddle);
CheckItemInfo.DetailItem cameraBottom = new CheckItemInfo.DetailItem();
cameraBottom.setTitle("摄像头_Bottom");
cameraBottom.setValue("正常");
detailItem.add(cameraBottom);
CheckItemInfo.DetailItem zhuJiGuang = new CheckItemInfo.DetailItem();
zhuJiGuang.setTitle("主机光雷达");
zhuJiGuang.setValue("异常");
detailItem.add(zhuJiGuang);
CheckItemInfo.DetailItem jiGuangLeft = new CheckItemInfo.DetailItem();
jiGuangLeft.setTitle("左侧激光雷达");
jiGuangLeft.setValue("异常");
detailItem.add(jiGuangLeft);
CheckItemInfo.DetailItem jiGuangRight = new CheckItemInfo.DetailItem();
jiGuangRight.setTitle("右侧激光雷达");
jiGuangRight.setValue("正常");
detailItem.add(jiGuangRight);
CheckItemInfo.DetailItem changjiao = new CheckItemInfo.DetailItem();
changjiao.setTitle("ADAS长焦摄像头");
changjiao.setValue("正常");
detailItem.add(changjiao);
CheckItemInfo.DetailItem guangJiaoFront = new CheckItemInfo.DetailItem();
guangJiaoFront.setTitle("ADAS广焦摄像头-前");
guangJiaoFront.setValue("正常");
detailItem.add(guangJiaoFront);
CheckItemInfo.DetailItem custom = new CheckItemInfo.DetailItem();
custom.setTitle("ADAS标准摄像头");
custom.setValue("正常");
detailItem.add(custom);
CheckItemInfo.DetailItem guangJiaoBe = new CheckItemInfo.DetailItem();
guangJiaoBe.setTitle("ADAS广焦摄像头-后");
guangJiaoBe.setValue("正常");
detailItem.add(guangJiaoBe);
CheckItemInfo.DetailItem rtk = new CheckItemInfo.DetailItem();
rtk.setTitle("RTK设备");
rtk.setValue("正常");
detailItem.add(rtk);
CheckItemInfo.DetailItem obu = new CheckItemInfo.DetailItem();
obu.setTitle("OUB设备");
obu.setValue("正常");
detailItem.add(obu);
CheckItemInfo.DetailItem luyou = new CheckItemInfo.DetailItem();
luyou.setTitle("路由器");
luyou.setValue("正常");
detailItem.add(luyou);
itemInfo.setItemList(detailItem);
arrHardware.add(itemInfo);
dataArrayList.add(arrHardware);
}
/**
* 检测指标上报
*/
public void publishCheckDetail() {
// MogoApisHandler.getInstance().getApis().getNetworkApi().create(CheckApiServices.class,
// HostConst.DEVA_HOST).uploadCheckDetail().
}
public static void start(Context context) {
Intent starter = new Intent(context, CheckActivity.class);
context.startActivity(starter);
}
/**
* 指标异常弹框
*/
public static void showDialog(Context context) {
CheckDialog dialog = new CheckDialog(context, true);
dialog.show();
}
@Override
protected void onDestroy() {
super.onDestroy();
dataArrayList.clear();
}
@Override
protected void onPause() {
super.onPause();
}
}

View File

@@ -0,0 +1,239 @@
package com.mogo.eagle.core.function.check.view;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.mogo.eagle.core.function.check.R;
import com.mogo.eagle.core.function.check.model.CheckItemInfo;
import java.util.ArrayList;
/**
* @author liujing
* @description 检测界面单元格
* @since: 7/27/21
*/
public class CheckAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final String TAG = "CheckActivity";
LayoutInflater mLayoutInflater;
ArrayList dataArrayList;
private Context mContext;
public CheckAdapter(@NonNull Context context, @NonNull ArrayList checkArray) {
mContext = context;
mLayoutInflater = LayoutInflater.from(context);
dataArrayList = checkArray;
Log.d(TAG, dataArrayList.toString());
}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return CheckItemInfo.CheckAdapterStyleEnum.ITEM_TYPE_CHECK_TITLE;
} else if (position == 1) {
return CheckItemInfo.CheckAdapterStyleEnum.ITEM_TYPE_CHECK_LIST;
}
return CheckItemInfo.CheckAdapterStyleEnum.ITEM_TYPE_CHECK_IMAGE;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == CheckItemInfo.CheckAdapterStyleEnum.ITEM_TYPE_CHECK_TITLE) {
View v = mLayoutInflater.inflate(R.layout.check_titel, parent,
false);
CheckTitleViewHolder holder = new CheckTitleViewHolder(v);
return holder;
}
if (viewType == CheckItemInfo.CheckAdapterStyleEnum.ITEM_TYPE_CHECK_IMAGE) {
View v = mLayoutInflater.inflate(R.layout.check_hardware, parent,
false);
CheckImage holder = new CheckImage(v);
return holder;
}
View v = mLayoutInflater.inflate(R.layout.check_list, parent,
false);
CheckListViewHolder holder = new CheckListViewHolder(v);
return holder;
}
/**
* 顶部view列表
*/
class CheckTitleViewHolder extends RecyclerView.ViewHolder {
private ImageView errorImage;
private TextView mTextView;
public CheckTitleViewHolder(@NonNull View itemView) {
super(itemView);
errorImage = itemView.findViewById(R.id.error_tip_image);
mTextView = itemView.findViewById(R.id.error_title);
}
}
/**
* 版本->软件检测
*/
class CheckListViewHolder extends RecyclerView.ViewHolder {
private TextView viewTitle;
private TextView iconAutoTitle;
private TextView autoRiskState;
private TextView iconyingTitle;
private TextView yingRiskState;
public CheckListViewHolder(@NonNull View itemView) {
super(itemView);
viewTitle = itemView.findViewById(R.id.list_item_title);
//自动驾驶
iconAutoTitle = itemView.findViewById(R.id.icon_auto_title);
autoRiskState = itemView.findViewById(R.id.auto_risk_state);
//鹰眼应用
iconyingTitle = itemView.findViewById(R.id.icon_ying_title);
yingRiskState = itemView.findViewById(R.id.ying_risk_state);
itemView.setLongClickable(true);
itemView.setOnLongClickListener(v -> {
Log.d(TAG, "长按显示状态工具栏");
Intent intent = new Intent();
intent.putExtra("oper", 52);
return true;
});
}
}
/**
* 硬件检测
*/
class CheckImage extends RecyclerView.ViewHolder {
private ImageView pad;
private ImageView jiaoJiGuangTop;
private TextView jiaoJiGuangTopText;
private ImageView jiaoJiGuangBottom;
private TextView jiaoJiGuangBottomText;
private ImageView zhuJiGuang;
private ImageView rtk;
private ImageView cameraTop;
private ImageView cameraMiddle;
private ImageView cameraBottom;
private ImageView cameraBehind;
private ImageView luyouqi;
private ImageView obu;
public CheckImage(@NonNull View itemView) {
super(itemView);
pad = itemView.findViewById(R.id.pad);
jiaoJiGuangTop = itemView.findViewById(R.id.jiaoJiGuangTop);
jiaoJiGuangTopText = itemView.findViewById(R.id.jiaoJiGuangTop_txt);
jiaoJiGuangBottom = itemView.findViewById(R.id.jiaoJiGuangBottom);
jiaoJiGuangBottomText = itemView.findViewById(R.id.jiaoJiGuangBottom_txt);
zhuJiGuang = itemView.findViewById(R.id.zhujiguang);
rtk = itemView.findViewById(R.id.rtk);
cameraTop = itemView.findViewById(R.id.top);
cameraMiddle = itemView.findViewById(R.id.middle);
cameraBottom = itemView.findViewById(R.id.bottom);
cameraBehind = itemView.findViewById(R.id.camera_begind);
luyouqi = itemView.findViewById(R.id.luyouqi);
obu = itemView.findViewById(R.id.obu);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
try {
Object list = dataArrayList.get(position);
if (position == 0) {
if (list instanceof ArrayList && ((ArrayList) list).size() > 0) {
CheckItemInfo item = (CheckItemInfo) ((ArrayList) list).get(0);
((CheckTitleViewHolder) holder).mTextView.setText(item.getTitle());
if (item.isUsual() == true) {
((CheckTitleViewHolder) holder).errorImage.setImageResource(R.drawable.check_right);
} else {
((CheckTitleViewHolder) holder).errorImage.setImageResource(R.drawable.check_wrong);
}
}
} else if (position == dataArrayList.size() - 1) {
((CheckListViewHolder) holder).viewTitle.setText("硬件检测:");
if (list instanceof ArrayList) {
refreshHardware(holder, (ArrayList) list);
}
} else {
if (list instanceof ArrayList && ((ArrayList) list).size() > 1) {
CheckItemInfo item = (CheckItemInfo) ((ArrayList) list).get(0);
((CheckListViewHolder) holder).viewTitle.setText(item.getViewTitle());
//自动驾驶 状态展示
((CheckListViewHolder) holder).iconAutoTitle.setText(item.getTitle());
((CheckListViewHolder) holder).autoRiskState.setText(item.getValue());
if (item.isUsual() == true) {
((CheckListViewHolder) holder).autoRiskState.setTextColor(mContext.getResources().getColor(R.color.check_little_btn_green));
} else {
((CheckListViewHolder) holder).autoRiskState.setTextColor(mContext.getResources().getColor(R.color.check_tip_error_color));
}
if (position == 1) {
if (item.isUsual() == false) {
((CheckListViewHolder) holder).autoRiskState.setTextColor(mContext.getResources().getColor(R.color.modules_commons_toast_text_color));
((CheckListViewHolder) holder).autoRiskState.setBackground(mContext.getResources().getDrawable(R.drawable.check_detail));
((CheckListViewHolder) holder).autoRiskState.setOnClickListener(v -> {
Log.d(TAG, "点击自动驾驶升级");
});
} else {
((CheckListViewHolder) holder).autoRiskState.setTextColor(mContext.getResources().getColor(R.color.check_little_btn_green));
}
}
//鹰眼 状态展示
CheckItemInfo itemForYing = (CheckItemInfo) ((ArrayList) list).get(1);
((CheckListViewHolder) holder).iconyingTitle.setText(itemForYing.getTitle());
((CheckListViewHolder) holder).yingRiskState.setText(itemForYing.getValue());
if (itemForYing.isUsual() == true) {
((CheckListViewHolder) holder).yingRiskState.setTextColor(mContext.getResources().getColor(R.color.check_little_btn_green));
} else {
((CheckListViewHolder) holder).yingRiskState.setTextColor(mContext.getResources().getColor(R.color.check_tip_error_color));
}
if (position == 1) {
if (itemForYing.isUsual() == false) {
((CheckListViewHolder) holder).yingRiskState.setTextColor(mContext.getResources().getColor(R.color.modules_commons_toast_text_color));
((CheckListViewHolder) holder).yingRiskState.setBackground(mContext.getResources().getDrawable(R.drawable.check_detail));
((CheckListViewHolder) holder).yingRiskState.setOnClickListener(v -> {
Log.d(TAG, "点击鹰眼升级");
});
} else {
((CheckListViewHolder) holder).yingRiskState.setTextColor(mContext.getResources().getColor(R.color.check_little_btn_green));
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 硬件检测指标
*
* @param list
*/
public void refreshHardware(@NonNull RecyclerView.ViewHolder holder, ArrayList list) {
if (list.size() > 0) {
CheckItemInfo info = (CheckItemInfo) list.get(0);
}
}
@Override
public int getItemCount() {
return dataArrayList.size();
}
}

View File

@@ -0,0 +1,59 @@
package com.mogo.eagle.core.function.check.view;
import android.content.Context;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import com.mogo.eagle.core.function.check.R;
import com.mogo.module.common.dialog.BaseFloatDialog;
/**
* @author liujing
* @description 车辆监控弹框提示
* @since: 7/30/21
*/
public class CheckDialog extends BaseFloatDialog {
private ImageView cancel;
private boolean showWarning;
public CheckDialog(@NonNull Context context, boolean hasError) {
super(context);
showWarning = hasError;
initView();
}
public CheckDialog(@NonNull Context context, int themeResId) {
super(context, themeResId);
}
public void initView() {
setContentView(R.layout.check_dialog);
cancel = findViewById(R.id.cancel_button);
cancel.setOnClickListener(v -> {
cancel();
});
//根据条件显示体检页面/风险提示
if (showWarning == true) {
findViewById(R.id.error_view).setVisibility(View.VISIBLE);
findViewById(R.id.check_view).setVisibility(View.INVISIBLE);
} else {
findViewById(R.id.error_view).setVisibility(View.INVISIBLE);
findViewById(R.id.check_view).setVisibility(View.VISIBLE);
}
}
public void cancel() {
super.dismiss();
}
@Override
public void dismiss() {
}
}

View File

@@ -0,0 +1,38 @@
package com.mogo.eagle.core.function.check.view;
import android.content.Context;
import android.util.AttributeSet;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.mogo.eagle.core.utilcode.util.LogUtils;
/**
* @author liujing
* @description 描述
* @since: 7/27/21
*/
class CheckLinearLayout extends LinearLayoutManager {
public CheckLinearLayout(Context context) {
super(context);
}
public CheckLinearLayout(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}
public CheckLinearLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
try {
super.onLayoutChildren(recycler, state);
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
LogUtils.dTag("CheckLinearLayout", "崩溃信息--" + e.toString());
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#4192FF"/>
<corners android:radius="55px"/>
</shape>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="6px" />
<gradient
android:angle="180"
android:endColor="#2B6EFF"
android:startColor="#3DCCFF" />
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#2B6EFF"/>
<corners android:radius="55px"/>
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#1E3282"/>
<corners android:radius="30px"/>
</shape>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/dp_30" />
<gradient
android:angle="180"
android:endColor="@color/check_list_item_back"
android:startColor="@color/check_list_item_back"
android:type="linear" />
</shape>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size
android:width="@dimen/check_little_btn_width"
android:height="@dimen/check_little_btn_width" />
//填充
<solid android:color="@color/check_little_btn_solid" />
//描边
<stroke
android:width="2px"
android:color="@color/check_little_btn" />
</shape>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size
android:width="@dimen/check_little_btn_width"
android:height="@dimen/check_little_btn_width" />
//填充
<solid android:color="@color/check_little_btn_solid_green" />
//描边
<stroke
android:width="2px"
android:color="@color/check_little_btn_green" />
</shape>

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="@dimen/dp_33" />
<solid android:color="#0B1030" />
</shape>
</item>
<item android:id="@android:id/progress">
<scale android:scaleWidth="100%">
<shape>
<corners android:radius="@dimen/dp_33" />
<solid android:color="#3DCCFF" />
<gradient
android:angle="180"
android:endColor="#2B6EFF"
android:startColor="#3DCCFF" />
</shape>
</scale>
</item>
<item android:id="@android:id/secondaryProgress">
<scale android:scaleWidth="100%">
<shape>
<corners android:radius="@dimen/dp_33" />
<solid android:color="#0B1030" />
</shape>
</scale>
</item>
</layer-list>

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blue_back_color"
tools:context="com.mogo.eagle.core.function.check.view.CheckActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/check_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/btnBack"
android:layout_width="@dimen/dp_106"
android:layout_height="@dimen/dp_106"
android:layout_marginLeft="@dimen/dp_50"
android:layout_marginTop="@dimen/dp_50"
android:src="@drawable/module_common_icon_close"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/animationLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blue_back_color">
<ImageView
android:id="@+id/scan_car_image"
android:layout_width="@dimen/check_scan_width"
android:layout_height="@dimen/check_scan_height"
android:layout_marginTop="@dimen/dp_400"
android:src="@drawable/check_scan_first"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.mogo.module.common.view.ImageViewClipBounds
android:id="@+id/scan_car_top_image"
android:layout_width="@dimen/check_scan_width"
android:layout_height="@dimen/check_scan_height"
android:scaleType="fitXY"
android:src="@drawable/check_scan_second"
android:visibility="invisible"
app:layout_constraintLeft_toLeftOf="@id/scan_car_image"
app:layout_constraintTop_toTopOf="@id/scan_car_image" />
<com.mogo.module.common.view.ImageViewClipBounds
android:id="@+id/scan_car_tips"
android:layout_width="@dimen/check_scan_width"
android:layout_height="@dimen/check_scan_height"
android:layout_marginLeft="@dimen/dp_699"
android:layout_marginTop="@dimen/dp_400"
android:layout_marginRight="@dimen/dp_699"
android:scaleType="fitEnd"
android:src="@drawable/check_scan_tips"
android:visibility="invisible"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/check_progress_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_120"
android:text="自动驾驶车辆体检中,请稍候……"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_42"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/scan_car_image" />
<ProgressBar
android:id="@+id/check_progress"
style="@style/check_progressBar_scale"
android:layout_width="@dimen/dp_520"
android:layout_height="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_57"
android:max="100"
android:progress="0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/check_progress_text" />
<ImageView
android:id="@+id/scan_line_image"
android:layout_width="@dimen/dp_25"
android:layout_height="@dimen/dp_652"
android:layout_marginTop="@dimen/dp_370"
android:src="@drawable/scan_tip_line"
app:layout_constraintLeft_toLeftOf="@id/scan_car_image"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,115 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="1529px"
android:layout_height="720px"
android:layout_gravity="center"
android:background="@drawable/check_dialog_back">
<ImageView
android:id="@+id/cancel_button"
android:layout_width="@dimen/dp_106"
android:layout_height="@dimen/dp_106"
android:layout_marginLeft="@dimen/dp_30"
android:layout_marginTop="@dimen/dp_30"
android:src="@drawable/module_common_icon_close"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/imageView"
android:layout_width="@dimen/dp_795"
android:layout_height="@dimen/dp_484"
android:layout_marginEnd="@dimen/dp_50"
android:layout_marginBottom="@dimen/dp_78"
android:src="@drawable/check_tip_image"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/error_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_97"
android:layout_marginTop="@dimen/dp_225"
android:visibility="invisible"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/error_image"
android:layout_width="@dimen/dp_56"
android:layout_height="@dimen/dp_56"
android:layout_marginTop="@dimen/dp_15"
android:src="@drawable/check_wrong"
app:layout_constraintTop_toTopOf="@id/error_view" />
<TextView
android:id="@+id/error_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:text="自动驾驶车辆存在风险"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_54"
android:textStyle="bold"
app:layout_constraintStart_toEndOf="@id/error_image"
app:layout_constraintTop_toTopOf="@id/error_view" />
<TextView
android:id="@+id/error_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_23"
android:text="软件运行异常"
android:textColor="@color/check_tip_error_color"
android:textSize="@dimen/dp_38"
app:layout_constraintTop_toBottomOf="@id/error_title" />
<TextView
android:id="@+id/check_detail"
android:layout_width="@dimen/dp_287"
android:layout_height="@dimen/dp_100"
android:layout_marginTop="@dimen/check_button_bottom"
android:background="@drawable/check_detail"
android:gravity="center"
android:text="查看详情"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/check_button_text_size"
app:layout_constraintTop_toBottomOf="@id/error_txt" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/check_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_133"
android:layout_marginTop="@dimen/dp_200"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/check_text_view"
android:layout_width="@dimen/dp_520"
android:layout_height="wrap_content"
android:text="您的自动驾驶系统已经很久没有进行体检了,建议立即体检。"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_44" />
<TextView
android:id="@+id/check_button"
android:layout_width="@dimen/dp_287"
android:layout_height="@dimen/dp_100"
android:layout_marginTop="@dimen/check_button_bottom"
android:background="@drawable/check_button"
android:gravity="center"
android:text="立即体检"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/check_button_text_size"
app:layout_constraintTop_toBottomOf="@id/check_text_view" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,314 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/dp_100"
android:layout_marginTop="@dimen/dp_15"
android:layout_marginEnd="@dimen/dp_100"
android:layout_marginBottom="@dimen/dp_15"
android:background="@drawable/check_list_item_back">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_50"
android:layout_marginTop="@dimen/dp_50"
android:gravity="left"
android:text="硬件检测:"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_42"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_goneMarginTop="@dimen/dp_50" />
<TextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_50"
android:text="(下面 1 项存在异常)"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_42"
app:layout_constraintLeft_toRightOf="@+id/title"
app:layout_constraintTop_toTopOf="parent" />
<!--角激光文字-->
<TextView
android:id="@+id/jiaoJiGuangTop_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/check_image"
android:layout_marginStart="@dimen/dp_1000"
android:layout_marginTop="@dimen/dp_236"
android:gravity="center"
android:text="角激光"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_32"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--车辆模型-->
<RelativeLayout
android:id="@+id/check_image"
android:layout_width="@dimen/check_hard_ware_image_width"
android:layout_height="@dimen/check_hard_ware_image_height"
android:layout_marginLeft="@dimen/dp_460"
android:layout_marginTop="144dp"
android:background="@drawable/check_scan_first"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent">
<!--Pad-->
<ImageView
android:id="@+id/pad"
android:layout_width="@dimen/dp_95"
android:layout_height="@dimen/dp_145"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/dp_292"
android:src="@drawable/pad_unusual" />
<TextView
android:id="@+id/pad_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/pad"
android:layout_alignEnd="@+id/pad"
android:layout_centerVertical="true"
android:gravity="center"
android:text="Pad"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_32" />
<!--前摄像头3-->
<TextView
android:id="@+id/camera_front_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/camera"
android:layout_marginStart="@dimen/dp_434"
android:layout_marginBottom="@dimen/dp_42"
android:gravity="center"
android:text="摄像头"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_32" />
<LinearLayout
android:id="@+id/camera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/dp_65"
android:layout_toEndOf="@+id/pad"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/top"
android:layout_width="@dimen/dp_56"
android:layout_height="@dimen/dp_56"
android:src="@drawable/camera_usual" />
<ImageView
android:id="@+id/middle"
android:layout_width="@dimen/dp_56"
android:layout_height="@dimen/dp_56"
android:layout_marginTop="@dimen/dp_10"
android:src="@drawable/camera_usual" />
<ImageView
android:id="@+id/bottom"
android:layout_width="@dimen/dp_56"
android:layout_height="@dimen/dp_56"
android:layout_marginTop="@dimen/dp_10"
android:src="@drawable/camera_usual" />
</LinearLayout>
<!--角激光-->
<ImageView
android:id="@+id/jiaoJiGuangTop"
android:layout_width="@dimen/dp_70"
android:layout_height="@dimen/dp_70"
android:layout_marginLeft="@dimen/dp_57"
android:layout_marginTop="@dimen/dp_100"
android:layout_toEndOf="@+id/camera"
android:src="@drawable/zhujiguang_usual" />
<ImageView
android:id="@+id/jiaoJiGuangBottom"
android:layout_width="@dimen/dp_70"
android:layout_height="@dimen/dp_70"
android:layout_alignTop="@+id/jiaoJiGuangTop"
android:layout_marginLeft="@dimen/dp_57"
android:layout_marginTop="@dimen/dp_440"
android:layout_toEndOf="@+id/camera"
android:src="@drawable/zhujiguang_usual" />
<!--主激光-->
<ImageView
android:id="@+id/zhujiguang"
android:layout_width="@dimen/dp_140"
android:layout_height="@dimen/dp_140"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/dp_77"
android:layout_toEndOf="@+id/camera"
android:src="@drawable/zhujiguang_usual" />
<TextView
android:id="@+id/zhujiguang_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/zhujiguang"
android:layout_alignEnd="@+id/zhujiguang"
android:layout_centerVertical="true"
android:gravity="center"
android:text="主激光"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_32" />
<!--RTK-->
<ImageView
android:id="@+id/rtk"
android:layout_width="@dimen/dp_140"
android:layout_height="@dimen/dp_80"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/dp_48"
android:layout_toEndOf="@+id/zhujiguang"
android:src="@drawable/rtk_usual" />
<TextView
android:id="@+id/rtk_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/rtk"
android:layout_alignEnd="@+id/rtk"
android:layout_centerVertical="true"
android:gravity="center"
android:text="RTK"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_32" />
<!--摄像头-后1-->
<ImageView
android:id="@+id/camera_begind"
android:layout_width="@dimen/dp_56"
android:layout_height="@dimen/dp_56"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/dp_78"
android:layout_toEndOf="@+id/rtk"
android:src="@drawable/camera_usual" />
<TextView
android:id="@+id/camera_begind_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/camera_begind"
android:layout_marginStart="@dimen/dp_972"
android:layout_marginBottom="@dimen/dp_42"
android:gravity="center"
android:text="摄像头"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_32" />
<!--路由器-->
<ImageView
android:id="@+id/luyouqi"
android:layout_width="@dimen/dp_77"
android:layout_height="@dimen/dp_90"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/dp_38"
android:layout_toEndOf="@+id/camera_begind"
android:src="@drawable/luyouqi_usual" />
<TextView
android:id="@+id/luyouqi_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/luyouqi"
android:layout_marginStart="@dimen/check_luyouqi_start"
android:layout_marginTop="@dimen/dp_42"
android:gravity="center"
android:text="路由器"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_32" />
<!--OBU-->
<ImageView
android:id="@+id/obu"
android:layout_width="@dimen/dp_140"
android:layout_height="@dimen/dp_80"
android:layout_alignParentTop="true"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_140"
android:layout_toEndOf="@+id/luyouqi"
android:src="@drawable/obu_unusual" />
</RelativeLayout>
<!--角激光文字-->
<TextView
android:id="@+id/jiaoJiGuangBottom_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/check_image"
android:layout_marginStart="@dimen/dp_1000"
android:gravity="center"
android:text="角激光"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_32"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/check_image" />
<!--OBU文案-->
<TextView
android:id="@+id/obu_top_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/check_image"
android:layout_marginStart="@dimen/check_obu_start"
android:layout_marginTop="@dimen/dp_236"
android:gravity="center"
android:text="OBU"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_32"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/error_tip"
android:layout_width="@dimen/dp_32"
android:layout_height="@dimen/dp_32"
android:layout_marginLeft="@dimen/dp_907"
android:layout_marginTop="@dimen/dp_177"
android:background="@drawable/check_little_btn"
android:backgroundTint="@color/check_tip_error_color"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/check_image" />
<TextView
android:id="@+id/unusual_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_24"
android:text="设备故障"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
app:layout_constraintLeft_toRightOf="@+id/error_tip"
app:layout_constraintTop_toTopOf="@+id/error_tip" />
<ImageView
android:id="@+id/error_tip_green"
android:layout_width="@dimen/dp_32"
android:layout_height="@dimen/dp_32"
android:layout_marginLeft="@dimen/dp_160"
android:layout_marginTop="88dp"
android:background="@drawable/check_little_btn_green"
app:layout_constraintLeft_toRightOf="@id/unusual_title"
app:layout_constraintTop_toBottomOf="@+id/check_image" />
<TextView
android:id="@+id/usual_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_24"
android:text="设备正常"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
app:layout_constraintLeft_toRightOf="@+id/error_tip_green"
app:layout_constraintTop_toTopOf="@+id/error_tip_green" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,114 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="2360px"
android:layout_height="@dimen/dp_643"
android:layout_marginStart="@dimen/dp_100"
android:layout_marginTop="@dimen/dp_15"
android:layout_marginEnd="@dimen/dp_100"
android:layout_marginBottom="@dimen/dp_15"
android:background="@drawable/check_list_item_back">
<TextView
android:id="@+id/list_item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_80"
android:layout_marginLeft="@dimen/dp_50"
android:layout_marginTop="@dimen/dp_50"
android:text="版本检测:(以下 1 项需要优化,版本升级后需要重启设备)"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_42"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--自动驾驶应用-->
<LinearLayout
android:id="@+id/auto_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_318"
android:layout_marginTop="@dimen/dp_78"
android:layout_marginBottom="@dimen/dp_108"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/title">
<ImageView
android:id="@+id/icon_auto"
android:layout_width="@dimen/dp_150"
android:layout_height="@dimen/dp_150"
android:layout_gravity="center"
android:src="@drawable/auto" />
<TextView
android:id="@+id/icon_auto_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/dp_22"
android:maxLines="2"
android:text="自动驾驶升级到\n 版本"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_42"
app:layout_constraintTop_toBottomOf="@id/icon_auto" />
<TextView
android:id="@+id/auto_risk_state"
android:layout_width="@dimen/dp_260"
android:layout_height="@dimen/dp_90"
android:layout_gravity="center"
android:layout_marginTop="@dimen/dp_56"
android:gravity="center"
android:textColor="@color/check_little_btn_green"
android:textSize="@dimen/dp_36"
app:layout_constraintTop_toTopOf="@+id/icon_auto_title" />
</LinearLayout>
<LinearLayout
android:id="@+id/ying_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_318"
android:layout_marginTop="@dimen/dp_78"
android:layout_marginBottom="@dimen/dp_108"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@+id/auto_layout"
app:layout_constraintTop_toBottomOf="@+id/title">
<ImageView
android:id="@+id/icon_ying"
android:layout_width="@dimen/dp_150"
android:layout_height="@dimen/dp_150"
android:layout_gravity="center"
android:src="@drawable/yingyan" />
<TextView
android:id="@+id/icon_ying_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/dp_22"
android:text=" 鹰眼\n版本"
android:textAlignment="center"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_42"
app:layout_constraintTop_toBottomOf="@id/icon_auto" />
<TextView
android:id="@+id/ying_risk_state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/dp_56"
android:textColor="@color/check_little_btn_green"
android:textSize="@dimen/dp_36"
app:layout_constraintTop_toTopOf="@+id/icon_auto_title" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_500"
android:layout_marginStart="@dimen/dp_100"
android:layout_marginTop="@dimen/dp_15"
android:layout_marginEnd="@dimen/dp_100"
android:layout_marginBottom="@dimen/dp_15">
<ImageView
android:id="@+id/error_tip_image"
android:layout_width="@dimen/dp_140"
android:layout_height="@dimen/dp_140"
android:layout_marginStart="@dimen/dp_856"
android:layout_marginTop="@dimen/dp_200"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/error_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_65"
android:layout_marginTop="@dimen/dp_20"
android:text="自动驾驶车辆存在风险"
android:textColor="@color/module_commons_wm_dialog_text_textColor"
android:textSize="@dimen/dp_64"
app:layout_constraintLeft_toRightOf="@+id/error_tip_image"
app:layout_constraintTop_toTopOf="@+id/error_tip_image" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="check_item_space_vr">30px</dimen>
<dimen name="check_button_text_size">38px</dimen>
<dimen name="check_button_bottom">70px</dimen>
<dimen name="check_button_left">133px</dimen>
<dimen name="check_image_bottom">50px</dimen>
<dimen name="check_image_right">50px</dimen>
<dimen name="check_hard_ware_image_width">1452px</dimen>
<dimen name="check_hard_ware_image_height">715px</dimen>
<dimen name="check_little_btn_width">32px</dimen>
<dimen name="check_luyouqi_start">1078px</dimen>
<dimen name="check_obu_start">1660px</dimen>
<dimen name="check_scan_width">1162px</dimen>
<dimen name="check_scan_height">570px</dimen>
</resources>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="blue_back_color">#1A1F40</color>
<color name="blue_check_color">#4192FF</color>
<color name="check_tip_error_color">#F03232</color>
<color name="check_little_btn_solid">#99FA1F21</color>
<color name="check_little_btn">#FF1F1F</color>
<color name="check_little_btn_solid_green">#997AFF87</color>
<color name="check_little_btn_green">#7AFF87</color>
<color name="check_list_item_back">#242B59</color>
</resources>

View File

@@ -0,0 +1 @@
<resources></resources>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="check_progressBar_scale" parent="@android:style/Widget.ProgressBar.Horizontal">
<item name="android:indeterminateDrawable">
@android:drawable/progress_indeterminate_horizontal
</item>
<item name="android:progressDrawable">@drawable/check_progress</item>
</style>
</resources>