diff --git a/OCH/mogo-och-bus-passenger/build.gradle b/OCH/mogo-och-bus-passenger/build.gradle index b38804a63d..fc55956e11 100644 --- a/OCH/mogo-och-bus-passenger/build.gradle +++ b/OCH/mogo-och-bus-passenger/build.gradle @@ -60,6 +60,7 @@ dependencies { implementation rootProject.ext.dependencies.mogo_core_data implementation rootProject.ext.dependencies.mogo_core_function_call implementation rootProject.ext.dependencies.mogo_core_function_v2x + implementation rootProject.ext.dependencies.mogo_core_function_hmi }else { implementation project(":core:mogo-core-utils") implementation project(":foudations:mogo-commons") @@ -67,6 +68,7 @@ dependencies { implementation project(':core:mogo-core-data') implementation project(':core:mogo-core-function-call') implementation project(':core:function-impl:mogo-core-function-v2x') + implementation project(':core:function-impl:mogo-core-function-hmi') } } diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml index dd85781820..0ba9339fee 100644 --- a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml @@ -4,6 +4,14 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5390f68844..93042f91d2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -36,6 +36,14 @@ android:name="MAP_SDK_VERSION" android:value="${MAP_SDK_VERSION}" /> + + + + diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/OnAdasClientListener.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/OnAdasClientListener.java new file mode 100644 index 0000000000..c3de9e1ffb --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/OnAdasClientListener.java @@ -0,0 +1,154 @@ +package com.zhidao.adas.client; + +import com.zhidao.adas.client.bean.ArrivalNotification; +import com.zhidao.adas.client.bean.AutopilotState; +import com.zhidao.adas.client.bean.BasicInfoReq; +import com.zhidao.adas.client.bean.CarConfigResp; +import com.zhidao.adas.client.bean.GlobalPathResp; +import com.zhidao.adas.client.bean.GnssInfo; +import com.zhidao.adas.client.bean.MogoReportMessage; +import com.zhidao.adas.client.bean.PerceptionTrafficLight; +import com.zhidao.adas.client.bean.RecordPanel; +import com.zhidao.adas.client.bean.TrackedObjects; +import com.zhidao.adas.client.bean.Trajectory; +import com.zhidao.adas.client.bean.VehicleState; +import com.zhidao.adas.client.bean.Warn; +import com.zhidao.support.adas.high.bean.IPCUpgradeStateInfo; +import com.zhidao.support.adas.high.bean.SSHResult; +import com.zhidao.support.adas.high.common.ProtocolStatus; + +public abstract class OnAdasClientListener { + /** + * 自动驾驶局部轨迹 车前引导线 + * + * @param trajectory 数据 + */ + public void onTrajectory(Trajectory trajectory) { + } + + /** + * 障碍物 他车数据 + * + * @param trackedObjects 数据 + */ + public void onTrackedObjects(TrackedObjects trackedObjects) { + } + + /** + * 惯导信息 + * + * @param gnssInfo 数据 + */ + public void onGnssInfo(GnssInfo gnssInfo) { + } + + /** + * 底盘信息, 透传底盘状态,pb参考底盘 + * + * @param vehicleState 数据 + */ + public void onVehicleState(VehicleState vehicleState) { + } + + /** + * 自动驾驶状态 + * + * @param autopilotState 数据 + */ + public void onAutopilotState(AutopilotState autopilotState) { + } + + /** + * 监控事件报告 + * + * @param mogoReportMessage 数据 + */ + public void onReportMessage(MogoReportMessage mogoReportMessage) { + } + + /** + * 感知红绿灯 + * + * @param trafficLights 感知红绿灯 + */ + public void onPerceptionTrafficLight(PerceptionTrafficLight trafficLights) { + } + + /** + * 自动驾驶设备基础信息请求 + * + * @param basicInfoReq 数据 目前没有任何参数 + */ + public void onBasicInfoReq(BasicInfoReq basicInfoReq) { + } + + /** + * 车机基础信息应答 + * + * @param carConfigResp 数据 + */ + public void onCarConfigResp(CarConfigResp carConfigResp) { + } + + /** + * 数据采集结果 + * + * @param recordPanel 数据 + */ + public void onRecordResult(RecordPanel recordPanel) { + } + + /** + * 自动驾驶路径应答 + * + * @param globalPathResp 数据 + */ + public void onGlobalPathResp(GlobalPathResp globalPathResp) { + } + + + /** + * 报警信息 + * 暂时保留,目前没有使用 + * + * @param warn 数据 + */ + @Deprecated + public void onWarn(Warn warn) { + } + + /** + * 到站提醒 自动驾驶站点 + * + * @param arrivalNotification 数据 + */ + public void onArrivalNotification(ArrivalNotification arrivalNotification) { + } + + /** + * 升级状态 + * + * @param info + */ + @Deprecated + public void onUpgradeStateInfo(IPCUpgradeStateInfo info) { + } + + /** + * 向IPC发送命令返回结果 + * + * @param info + */ + public void onSSHResult(SSHResult info) { + } + + /** + * 数据错误 + * + * @param status 错误原因 + * @param bytes 原始数据 + */ + public void onError(ProtocolStatus status, byte[] bytes) { + + } +} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java index 787f60c6d0..64d47bc670 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java @@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat; import mogo.telematics.pad.MessagePad; -public class ArrivalNotification extends Base { +public class ArrivalNotification extends BaseInfo { public final MessagePad.ArrivalNotification bean; public ArrivalNotification(MessagePad.Header header, MessagePad.ArrivalNotification bean) { - super(bean.getSerializedSize(), header); + super("接收", bean.getSerializedSize(), header); this.bean = bean; } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java index 95924fa432..aaebc9ba7a 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java @@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat; import mogo.telematics.pad.MessagePad; -public class AutopilotState extends Base { +public class AutopilotState extends BaseInfo { public final MessagePad.AutopilotState bean; public AutopilotState(MessagePad.Header header, MessagePad.AutopilotState bean) { - super(bean.getSerializedSize(), header); + super("接收", bean.getSerializedSize(), header); this.bean = bean; } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Base.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Base.java deleted file mode 100644 index e492bd77ef..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Base.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.zhidao.adas.client.bean; - - -import com.google.protobuf.TextFormat; - -import mogo.telematics.pad.MessagePad; - -public abstract class Base { - public final MessagePad.Header header; - public final int len; - - public Base(int len, MessagePad.Header header) { - this.len = 8 + header.getSerializedSize() + len; - this.header = header; - } - - @Override - public String toString() { - return len + "##Header:[" + TextFormat.printer().escapingNonAscii(false).shortDebugString(header)+"]\n"; - } -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BaseInfo.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BaseInfo.java new file mode 100644 index 0000000000..cf2f171b1d --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BaseInfo.java @@ -0,0 +1,32 @@ +package com.zhidao.adas.client.bean; + + +import com.google.protobuf.TextFormat; + +import mogo.telematics.pad.MessagePad; + +public abstract class BaseInfo { + public final String action; + public final long nowTime; + public final MessagePad.Header header; + public final int len; + + public BaseInfo(String action, int len, MessagePad.Header header) { + this.action = action; + nowTime = System.currentTimeMillis(); + this.len = 8 + header.getSerializedSize() + len; + this.header = header; + } + + public BaseInfo(String action, int len) { + this.action = action; + nowTime = System.currentTimeMillis(); + this.len = len; + this.header = null; + } + + @Override + public String toString() { + return len + "##Header:[" + TextFormat.printer().escapingNonAscii(false).shortDebugString(header) + "]\n"; + } +} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java index 698bea7d2d..496d32df71 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java @@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat; import mogo.telematics.pad.MessagePad; -public class BasicInfoReq extends Base { +public class BasicInfoReq extends BaseInfo { public final MessagePad.BasicInfoReq bean; public BasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq bean) { - super(bean.getSerializedSize(), header); + super("接收", bean.getSerializedSize(), header); this.bean = bean; } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java index 85488fe61a..0fadfaa882 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java @@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat; import mogo.telematics.pad.MessagePad; -public class CarConfigResp extends Base { +public class CarConfigResp extends BaseInfo { public final MessagePad.CarConfigResp bean; public CarConfigResp(MessagePad.Header header, MessagePad.CarConfigResp bean) { - super(bean.getSerializedSize(), header); + super("接收", bean.getSerializedSize(), header); this.bean = bean; } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ErrorData.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ErrorData.java index aded5d05cc..a9e21f6c31 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ErrorData.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ErrorData.java @@ -3,11 +3,12 @@ package com.zhidao.adas.client.bean; import com.zhidao.support.adas.high.common.DigitalTrans; import com.zhidao.support.adas.high.common.ProtocolStatus; -public class ErrorData { +public class ErrorData extends BaseInfo { private final ProtocolStatus status; private final byte[] bytes; public ErrorData(ProtocolStatus status, byte[] bytes) { + super("接收", bytes.length); this.status = status; this.bytes = bytes; } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java index 5fb044171c..5d4d67cd6d 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java @@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat; import mogo.telematics.pad.MessagePad; -public class GlobalPathResp extends Base { +public class GlobalPathResp extends BaseInfo { public final MessagePad.GlobalPathResp bean; public GlobalPathResp(MessagePad.Header header, MessagePad.GlobalPathResp bean) { - super(bean.getSerializedSize(), header); + super("接收", bean.getSerializedSize(), header); this.bean = bean; } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java index cb762f80f8..2e37afa373 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java @@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat; import mogo.telematics.pad.MessagePad; -public class GnssInfo extends Base { +public class GnssInfo extends BaseInfo { public final MessagePad.GnssInfo bean; public GnssInfo(MessagePad.Header header, MessagePad.GnssInfo bean) { - super(bean.getSerializedSize(), header); + super("接收", bean.getSerializedSize(), header); this.bean = bean; } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java index 39a2f8e7e2..54c4eb7be9 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java @@ -5,11 +5,11 @@ import com.google.protobuf.TextFormat; import mogo.telematics.pad.MessagePad; import mogo_msg.MogoReportMsg; -public class MogoReportMessage extends Base { +public class MogoReportMessage extends BaseInfo { public final MogoReportMsg.MogoReportMessage bean; public MogoReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage bean) { - super(bean.getSerializedSize(), header); + super("接收", bean.getSerializedSize(), header); this.bean = bean; } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MySSHResult.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MySSHResult.java new file mode 100644 index 0000000000..0273e1713d --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MySSHResult.java @@ -0,0 +1,10 @@ +package com.zhidao.adas.client.bean; + +public class MySSHResult extends BaseInfo { + public final String info; + + public MySSHResult(String info, int len) { + super("接收", len); + this.info = info; + } +} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java index 5b50580c61..5587a6acd8 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java @@ -5,11 +5,11 @@ import com.google.protobuf.TextFormat; import mogo.telematics.pad.MessagePad; import perception.TrafficLightOuterClass; -public class PerceptionTrafficLight extends Base { +public class PerceptionTrafficLight extends BaseInfo { public final TrafficLightOuterClass.TrafficLights bean; public PerceptionTrafficLight(MessagePad.Header header, TrafficLightOuterClass.TrafficLights bean) { - super(bean.getSerializedSize(), header); + super("接收", bean.getSerializedSize(), header); this.bean = bean; } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java index 3071ef7317..c00cce9217 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java @@ -5,11 +5,11 @@ import com.google.protobuf.TextFormat; import mogo.telematics.pad.MessagePad; import record_cache.RecordPanelOuterClass; -public class RecordPanel extends Base { +public class RecordPanel extends BaseInfo { public final RecordPanelOuterClass.RecordPanel bean; public RecordPanel(MessagePad.Header header, RecordPanelOuterClass.RecordPanel bean) { - super(bean.getSerializedSize(), header); + super("接收", bean.getSerializedSize(), header); this.bean = bean; } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java index caaa4d1c81..efcbcb2fef 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java @@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat; import mogo.telematics.pad.MessagePad; -public class TrackedObjects extends Base { +public class TrackedObjects extends BaseInfo { private MessagePad.TrackedObjects bean; public TrackedObjects(MessagePad.Header header, MessagePad.TrackedObjects bean) { - super(bean.getSerializedSize(), header); + super("接收", bean.getSerializedSize(), header); this.bean = bean; } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java index 047888f8f7..ac4cbe5c33 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java @@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat; import mogo.telematics.pad.MessagePad; -public class Trajectory extends Base { +public class Trajectory extends BaseInfo { public final MessagePad.Trajectory bean; public Trajectory(MessagePad.Header header, MessagePad.Trajectory bean) { - super(bean.getSerializedSize(), header); + super("接收", bean.getSerializedSize(), header); this.bean = bean; } @Override diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java index df03675788..ebdacb3c7d 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java @@ -5,11 +5,11 @@ import com.google.protobuf.TextFormat; import chassis.VehicleStateOuterClass; import mogo.telematics.pad.MessagePad; -public class VehicleState extends Base { +public class VehicleState extends BaseInfo { public final VehicleStateOuterClass.VehicleState bean; public VehicleState(MessagePad.Header header, VehicleStateOuterClass.VehicleState bean) { - super(bean.getSerializedSize(), header); + super("接收", bean.getSerializedSize(), header); this.bean = bean; } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java index f438ae5b8f..fd41e8e212 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java @@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat; import mogo.telematics.pad.MessagePad; -public class Warn extends Base { +public class Warn extends BaseInfo { public final MessagePad.Warn bean; public Warn(MessagePad.Header header, MessagePad.Warn bean) { - super(bean.getSerializedSize(), header); + super("接收", bean.getSerializedSize(), header); this.bean = bean; } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/LogSave.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/LogSave.java index 016bfcacbc..ad3059f24d 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/LogSave.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/LogSave.java @@ -4,6 +4,21 @@ import android.os.Environment; import android.text.TextUtils; import android.util.Log; +import com.zhidao.adas.client.OnAdasClientListener; +import com.zhidao.adas.client.bean.ArrivalNotification; +import com.zhidao.adas.client.bean.AutopilotState; +import com.zhidao.adas.client.bean.BaseInfo; +import com.zhidao.adas.client.bean.BasicInfoReq; +import com.zhidao.adas.client.bean.CarConfigResp; +import com.zhidao.adas.client.bean.GlobalPathResp; +import com.zhidao.adas.client.bean.GnssInfo; +import com.zhidao.adas.client.bean.MogoReportMessage; +import com.zhidao.adas.client.bean.PerceptionTrafficLight; +import com.zhidao.adas.client.bean.RecordPanel; +import com.zhidao.adas.client.bean.TrackedObjects; +import com.zhidao.adas.client.bean.Trajectory; +import com.zhidao.adas.client.bean.VehicleState; +import com.zhidao.adas.client.bean.Warn; import com.zhidao.support.adas.high.common.ThreadPoolManager; import java.io.BufferedWriter; @@ -11,7 +26,9 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import java.util.Locale; import java.util.concurrent.Future; import java.util.concurrent.LinkedBlockingQueue; @@ -25,12 +42,13 @@ public class LogSave { private static final String LOG_FILE_NAME = "%s.log";//文件名称 private volatile static LogSave INSTANCE; private static final long MAX_CAPACITY = 20 * 1024 * 1024L;//单文件最大存储容量 kb - private final LinkedBlockingQueue queue; + private final LinkedBlockingQueue queue; private BufferedWriter buff = null; private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.getDefault()); private File file; private volatile long capacity = MAX_CAPACITY; private Future future; + private List listeners = new ArrayList<>(); private LogSave() { queue = new LinkedBlockingQueue<>(); @@ -47,6 +65,15 @@ public class LogSave { return INSTANCE; } + public void registerOnAdasClientListener(OnAdasClientListener listener) { + if (!listeners.contains(listener)) { + listeners.add(listener); + } + } + + public void unregisterOnAdasClientListener(OnAdasClientListener listener) { + listeners.remove(listener); + } public boolean isSdcardUse() { boolean bl = false; @@ -74,13 +101,12 @@ public class LogSave { } - public void saveLog(String action, String data) { - long nowTime = System.currentTimeMillis(); - String time = sdf.format(new Date(nowTime)); - String builder = time + " [action]:" + action + " [data]:" + data; - queue.add(builder); - } + public void saveLog(BaseInfo info) { + if (isStart()) { + queue.add(info); + } + } public boolean isStart() { return future != null; } @@ -128,9 +154,43 @@ public class LogSave { closeBufferedWriter(); getFile(); } - String data = queue.take(); - if (!TextUtils.isEmpty(data)) { - buff.write(data); + BaseInfo data = queue.take(); + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + if (data instanceof Trajectory) { + listener.onTrajectory((Trajectory) data); + } else if (data instanceof TrackedObjects) { + listener.onTrackedObjects((TrackedObjects) data); + }else if (data instanceof GnssInfo) { + listener.onGnssInfo((GnssInfo) data); + }else if (data instanceof VehicleState) { + listener.onVehicleState((VehicleState) data); + }else if (data instanceof AutopilotState) { + listener.onAutopilotState((AutopilotState) data); + }else if (data instanceof MogoReportMessage) { + listener.onReportMessage((MogoReportMessage) data); + }else if (data instanceof PerceptionTrafficLight) { + listener.onPerceptionTrafficLight((PerceptionTrafficLight) data); + }else if (data instanceof BasicInfoReq) { + listener.onBasicInfoReq((BasicInfoReq) data); + }else if (data instanceof CarConfigResp) { + listener.onCarConfigResp((CarConfigResp) data); + }else if (data instanceof RecordPanel) { + listener.onRecordResult((RecordPanel) data); + }else if (data instanceof GlobalPathResp) { + listener.onGlobalPathResp((GlobalPathResp) data); + }else if (data instanceof Warn) { + listener.onWarn((Warn) data); + }else if (data instanceof ArrivalNotification) { + listener.onArrivalNotification((ArrivalNotification) data); + } + } + } + + String time = sdf.format(new Date(data.nowTime)); + String builder = time + " [action]:" + data.action + " [data]:" + data.toString(); + if (!TextUtils.isEmpty(builder)) { + buff.write(builder); buff.newLine(); buff.flush(); } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java index fbfb7d61ae..622e1e6fac 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java @@ -54,6 +54,7 @@ import com.zhidao.adas.client.bean.GlobalPathResp; import com.zhidao.adas.client.bean.GnssInfo; import com.zhidao.adas.client.bean.IPCConnectState; import com.zhidao.adas.client.bean.MogoReportMessage; +import com.zhidao.adas.client.bean.MySSHResult; import com.zhidao.adas.client.bean.PerceptionTrafficLight; import com.zhidao.adas.client.bean.RecordPanel; import com.zhidao.adas.client.bean.TrackedObjects; @@ -632,7 +633,8 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onSSHResult(final SSHResult info) { - LogSave.getInstance().saveLog("接收", info.toString()); + MySSHResult result = new MySSHResult(info.toString(), 0); + LogSave.getInstance().saveLog(result); showToastCenter("IPC命令下发结果:" + info.code + " 命令:" + info.cmd + " 信息:" + info.msg); CupidLogUtils.w(TAG, "IPC命令下发结果:" + info.code + " 命令:" + info.cmd + " 信息:" + info.msg); } @@ -640,63 +642,63 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onError(ProtocolStatus status, byte[] bytes) { ErrorData base = new ErrorData(status, bytes); - LogSave.getInstance().saveLog("接收", base.toString()); + LogSave.getInstance().saveLog(base); EventBus.getDefault().post(base); } @Override public void onTrajectory(MessagePad.Header header, MessagePad.Trajectory trajectory) { Trajectory base = new Trajectory(header, trajectory); - LogSave.getInstance().saveLog("接收", base.toString()); + LogSave.getInstance().saveLog(base); EventBus.getDefault().post(base); } @Override public void onTrackedObjects(MessagePad.Header header, MessagePad.TrackedObjects trackedObjects) { TrackedObjects base = new TrackedObjects(header, trackedObjects); - LogSave.getInstance().saveLog("接收", base.toString()); + LogSave.getInstance().saveLog(base); EventBus.getDefault().post(base); } @Override public void onGnssInfo(MessagePad.Header header, MessagePad.GnssInfo gnssInfo) { GnssInfo base = new GnssInfo(header, gnssInfo); - LogSave.getInstance().saveLog("接收", base.toString()); + LogSave.getInstance().saveLog(base); EventBus.getDefault().post(base); } @Override public void onVehicleState(MessagePad.Header header, VehicleStateOuterClass.VehicleState vehicleState) { VehicleState base = new VehicleState(header, vehicleState); - LogSave.getInstance().saveLog("接收", base.toString()); + LogSave.getInstance().saveLog(base); EventBus.getDefault().post(base); } @Override public void onAutopilotState(MessagePad.Header header, MessagePad.AutopilotState autopilotState) { AutopilotState base = new AutopilotState(header, autopilotState); - LogSave.getInstance().saveLog("接收", base.toString()); + LogSave.getInstance().saveLog(base); EventBus.getDefault().post(base); } @Override public void onReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage mogoReportMessage) { MogoReportMessage base = new MogoReportMessage(header, mogoReportMessage); - LogSave.getInstance().saveLog("接收", base.toString()); + LogSave.getInstance().saveLog(base); EventBus.getDefault().post(base); } @Override public void onPerceptionTrafficLight(MessagePad.Header header, TrafficLightOuterClass.TrafficLights trafficLights) { PerceptionTrafficLight base = new PerceptionTrafficLight(header, trafficLights); - LogSave.getInstance().saveLog("接收", base.toString()); + LogSave.getInstance().saveLog(base); EventBus.getDefault().post(base); } @Override public void onBasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq basicInfoReq) { BasicInfoReq info = new BasicInfoReq(header, basicInfoReq); - LogSave.getInstance().saveLog("接收", info.toString()); + LogSave.getInstance().saveLog(info); AdasManager.getInstance().sendBasicInfoResp("X202021111192N41VY", 1); showToastCenter("收到车机基础信息请求:" + info.toString()); // EventBus.getDefault().post(new BasicInfoReq(header, basicInfoReq)); @@ -705,14 +707,14 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onCarConfigResp(MessagePad.Header header, MessagePad.CarConfigResp carConfigResp) { CarConfigResp base = new CarConfigResp(header, carConfigResp); - LogSave.getInstance().saveLog("接收", base.toString()); + LogSave.getInstance().saveLog(base); EventBus.getDefault().postSticky(base); } @Override public void onRecordResult(MessagePad.Header header, RecordPanelOuterClass.RecordPanel recordPanel) { RecordPanel base = new RecordPanel(header, recordPanel); - LogSave.getInstance().saveLog("接收", base.toString()); + LogSave.getInstance().saveLog(base); recordKey = recordPanel.getKey(); recordFileName = recordPanel.getFilename(); EventBus.getDefault().post(base); @@ -721,27 +723,27 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onGlobalPathResp(MessagePad.Header header, MessagePad.GlobalPathResp globalPathResp) { GlobalPathResp base = new GlobalPathResp(header, globalPathResp); - LogSave.getInstance().saveLog("接收", base.toString()); + LogSave.getInstance().saveLog(base); EventBus.getDefault().post(base); } @Override public void onWarn(MessagePad.Header header, MessagePad.Warn warn) { Warn base = new Warn(header, warn); - LogSave.getInstance().saveLog("接收", base.toString()); + LogSave.getInstance().saveLog(base); EventBus.getDefault().post(base); } @Override public void onArrivalNotification(MessagePad.Header header, MessagePad.ArrivalNotification arrivalNotification) { ArrivalNotification base = new ArrivalNotification(header, arrivalNotification); - LogSave.getInstance().saveLog("接收", base.toString()); + LogSave.getInstance().saveLog(base); EventBus.getDefault().post(base); } @Override public void onUpgradeStateInfo(final IPCUpgradeStateInfo info) { - LogSave.getInstance().saveLog("接收", info.toString()); +// LogSave.getInstance().saveLog("接收", info.toString()); EventBus.getDefault().post(info); } @@ -898,7 +900,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } getHandler().sendEmptyMessage(WHAT_IPC_IP); } - LogSave.getInstance().saveLog("连接状态", status); +// LogSave.getInstance().saveLog("连接状态", status); CupidLogUtils.i(TAG, "connectStatus=" + status); } diff --git a/config.gradle b/config.gradle index 4965ab8c16..5edb8a051f 100644 --- a/config.gradle +++ b/config.gradle @@ -166,7 +166,7 @@ ext { crashreportapmbyte : "com.mogo.test:crashreport-apmbyte:${CRASHREPORT_APMBYTE_VERSION}", crashreportnoop : "com.mogo.test:crashreport-noop:${CRASHREPORT_NOOP_VERSION}", crashreportupgrade : "com.mogo.test:crashreport-upgrade:${CRASHREPORT_UPGRADE_VERSION}", - apm_insight : 'com.volcengine:apm_insight:1.4.4.cn', + apm_insight : 'com.volcengine:apm_insight:1.4.5.cn', apm_insight_crash : 'com.volcengine:apm_insight_crash:1.4.2', //========================= TTS语音 Maven 版本管理 ========================= diff --git a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java index 90e5188004..4bf44658d8 100644 --- a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java +++ b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java @@ -10,6 +10,7 @@ import com.mogo.eagle.core.data.constants.MogoServicePaths; import com.mogo.eagle.core.function.api.bindingcar.BindingcarCallBack; import com.mogo.eagle.core.function.api.bindingcar.IMoGoBindingcarProvider; import com.mogo.eagle.core.function.bindingcar.network.BindingcarNetWorkManager; +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; import org.jetbrains.annotations.NotNull; @@ -66,11 +67,13 @@ public class BindingcarProvider implements IMoGoBindingcarProvider { private int getScreenType() { int screenType = -1; - if (FunctionBuildConfig.appIdentityMode == 0 || FunctionBuildConfig.appIdentityMode == 0xA0) { + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { screenType = 1; //司机屏 - } else if (FunctionBuildConfig.appIdentityMode == 1 || FunctionBuildConfig.appIdentityMode == 0xA1) { - screenType = 2; //乘客屏 } + +// if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { +// screenType = 2; //乘客屏 +// } return screenType; } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/WaringPresenter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/HmiPresenter.kt similarity index 58% rename from core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/WaringPresenter.kt rename to core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/HmiPresenter.kt index 866cf26116..7ebe9297ac 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/WaringPresenter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/HmiPresenter.kt @@ -6,8 +6,8 @@ import com.mogo.commons.mvp.Presenter * @author xiaoyuzhou * @date 2021/8/3 3:55 下午 */ -class WaringPresenter(view: MoGoWarningContract.View?) : - Presenter(view) { +class HmiPresenter(view: MoGoHmiContract.View?) : + Presenter(view) { } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoWarningContract.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiContract.kt similarity index 93% rename from core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoWarningContract.kt rename to core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiContract.kt index b9916ef0da..3cb6912670 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoWarningContract.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiContract.kt @@ -11,7 +11,7 @@ import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener *@author xiaoyuzhou *@date 2021/8/4 3:38 下午 */ -interface MoGoWarningContract { +interface MoGoHmiContract { interface View : IView { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index 76628e984a..70b9dd7140 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -60,10 +60,10 @@ import java.util.* * 预警图层 */ @Route(path = MoGoFragmentPaths.PATH_FRAGMENT_HMI) -class MoGoHmiFragment : MvpFragment(), +class MoGoHmiFragment : MvpFragment(), IMoGoWaringProvider, IMoGoHmiViewProxy, - MoGoWarningContract.View, + MoGoHmiContract.View, IMoGoAutopilotRecordListener { private val TAG = "MoGoHmiFragment" @@ -347,8 +347,8 @@ class MoGoHmiFragment : MvpFragment return TAG } - override fun createPresenter(): WaringPresenter { - return WaringPresenter(this) + override fun createPresenter(): HmiPresenter { + return HmiPresenter(this) } override fun setSpeedChartViewVisibility(visibility: Int) { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/BrakeViewStatus.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/BrakeViewStatus.kt index 5324d03e61..56f19763b4 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/BrakeViewStatus.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/BrakeViewStatus.kt @@ -10,7 +10,9 @@ import android.view.animation.AlphaAnimation import android.view.animation.Animation import android.view.animation.DecelerateInterpolator import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import kotlinx.android.synthetic.main.view_brake_light_status.view.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope @@ -28,7 +30,12 @@ class BrakeViewStatus @JvmOverloads constructor( defStyleAttr: Int = 0 ) : ConstraintLayout(context, attrs, defStyleAttr) { init { - LayoutInflater.from(context).inflate(R.layout.view_brake_light_status, this, true) + //bus乘客端 + if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { + LayoutInflater.from(context).inflate(R.layout.view_brake_light_status_daytime, this, true) + } else { + LayoutInflater.from(context).inflate(R.layout.view_brake_light_status, this, true) + } } private var isBrake: Boolean = false @@ -55,12 +62,12 @@ class BrakeViewStatus @JvmOverloads constructor( if (isBrake) { isBrake = false GlobalScope.launch(Dispatchers.Main) { - scaleImageAndTv() +// scaleImageAndTv() var disappearAnimation = AlphaAnimation(1f, 0f) - disappearAnimation.duration = 1200 + disappearAnimation.duration = 400 layout_brake.startAnimation(disappearAnimation) - image_brake.startAnimation(disappearAnimation) - tv_brake.startAnimation(disappearAnimation) +// image_brake.startAnimation(disappearAnimation) +// tv_brake.startAnimation(disappearAnimation) disappearAnimation.setAnimationListener(object : Animation.AnimationListener { override fun onAnimationRepeat(p0: Animation?) { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt index 394e463161..de079bb6b6 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt @@ -107,9 +107,9 @@ class TurnLightViewStatus @JvmOverloads constructor( //显示背景 private fun showNormalAnimation() { val appearAnimation = AlphaAnimation(0f, 1.0f) - appearAnimation.duration = 600 + appearAnimation.duration = 300 val appearAnimationImage = AlphaAnimation(0f, 1.0f) - appearAnimation.duration = 1000 + appearAnimation.duration = 500 turn_light_layout.startAnimation(appearAnimation) left_nor_image.startAnimation(appearAnimationImage) right_nor_image.startAnimation(appearAnimationImage) @@ -134,7 +134,7 @@ class TurnLightViewStatus @JvmOverloads constructor( disappearAnimationLeft.duration = 300 val disappearAnimationBg = AlphaAnimation(1.0f, 0f) - disappearAnimationBg.duration = 1200 + disappearAnimationBg.duration = 500 left_nor_image.startAnimation(disappearAnimationLeft) right_nor_image.startAnimation(disappearAnimationLeft) @@ -170,7 +170,7 @@ class TurnLightViewStatus @JvmOverloads constructor( //实现图片闪烁效果 private fun setAnimation(imageView: ImageView) { val animation = AlphaAnimation(1.0f, 0f) - animation.duration = 600 + animation.duration = 500 animation.interpolator = LinearInterpolator() animation.repeatCount = Animation.INFINITE animation.repeatMode = Animation.REVERSE diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt index 66be06132d..4d201ca303 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt @@ -5,6 +5,7 @@ import android.content.Context import android.content.res.TypedArray import android.graphics.* import android.util.AttributeSet +import android.util.Log import android.view.View import android.view.animation.OvershootInterpolator import androidx.core.content.ContextCompat @@ -16,23 +17,28 @@ import com.mogo.eagle.core.function.hmi.R * @since: 2022/1/14 */ class CircularProgressView @JvmOverloads constructor( - context: Context, attrs: AttributeSet?, defStyleAttr : Int) - : View(context, attrs, defStyleAttr){ + context: Context, attrs: AttributeSet?, defStyleAttr: Int) + : View(context, attrs, defStyleAttr) { + + val typedArray: TypedArray = context.obtainStyledAttributes(attrs, R.styleable.CircularProgressView) + val TAG: String = "CircularProgressView" - val typedArray : TypedArray = context.obtainStyledAttributes(attrs, R.styleable.CircularProgressView) // 绘制画笔 - private val mBackPaint : Paint = Paint() - private val mProgPaint : Paint = Paint() + private val mBackPaint: Paint = Paint() + private val mProgPaint: Paint = Paint() + // 绘制区域 - private var mRectF : RectF? = null + private var mRectF: RectF? = null + // 圆环渐变色 - private var mColorArray : IntArray?=null + private var mColorArray: IntArray? = null + // 圆环进度(0-100) 初始化进度 - private var mProgress : Int = typedArray.getInteger(R.styleable.CircularProgressView_progress, 0) + private var mProgress: Int = typedArray.getInteger(R.styleable.CircularProgressView_progress, 0) - constructor(context : Context) : this(context,null) + constructor(context: Context) : this(context, null) - constructor(context : Context,attrs : AttributeSet?) :this(context, attrs, 0) + constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0) init { // 初始化背景圆环画笔 @@ -52,9 +58,9 @@ class CircularProgressView @JvmOverloads constructor( // 初始化进度圆环渐变色 val startColor = typedArray.getColor(R.styleable.CircularProgressView_progStartColor, -1) val firstColor = typedArray.getColor(R.styleable.CircularProgressView_progFirstColor, -1) - if(startColor != -1 && firstColor != -1){ - mColorArray = intArrayOf(startColor,firstColor) - }else{ + if (startColor != -1 && firstColor != -1) { + mColorArray = intArrayOf(startColor, firstColor) + } else { mColorArray = null } @@ -67,16 +73,17 @@ class CircularProgressView @JvmOverloads constructor( val viewWide = getMeasuredWidth() - getPaddingLeft() - getPaddingRight(); val viewHigh = getMeasuredHeight() - getPaddingTop() - getPaddingBottom(); val mRectLength = - ((if (viewWide > viewHigh) viewHigh else viewWide) - if (mBackPaint.strokeWidth > mProgPaint.strokeWidth) mBackPaint.strokeWidth else mProgPaint.strokeWidth).toInt() + ((if (viewWide > viewHigh) viewHigh else viewWide) - if (mBackPaint.strokeWidth > mProgPaint.strokeWidth) mBackPaint.strokeWidth else mProgPaint.strokeWidth).toInt() val mRectL = getPaddingLeft() + (viewWide - mRectLength) / 2 val mRectT = getPaddingTop() + (viewHigh - mRectLength) / 2 mRectF = RectF(mRectL.toFloat(), mRectT.toFloat(), (mRectL + mRectLength).toFloat(), - (mRectT + mRectLength).toFloat()) + (mRectT + mRectLength).toFloat()) + Log.d(TAG, "渐变色:" + mColorArray?.size.toString()) // 设置进度圆环渐变色 mColorArray?.let { mProgPaint.shader = LinearGradient( - 0.0f, 0.0f, 0.0f, - measuredWidth.toFloat(), it, null, Shader.TileMode.MIRROR) + 0.0f, 0.0f, 0.0f, + measuredWidth.toFloat(), it, null, Shader.TileMode.MIRROR) } } @@ -84,9 +91,11 @@ class CircularProgressView @JvmOverloads constructor( override fun onDraw(canvas: Canvas?) { super.onDraw(canvas) canvas?.let { - mRectF?.let { it1 -> it.drawArc(it1, 0.0f, 360.0f, false, mBackPaint) } - mRectF?.let { it1 -> it.drawArc(it1, 275.0f, - (360 * mProgress / 100).toFloat(), false, mProgPaint) } + mRectF?.let { it1 -> it.drawArc(it1, 0.0f, 360.0f, false, mBackPaint) } + mRectF?.let { it1 -> + it.drawArc(it1, 275.0f, + (360 * mProgress / 100).toFloat(), false, mProgPaint) + } } } @@ -95,7 +104,7 @@ class CircularProgressView @JvmOverloads constructor( * 获取当前进度 * @return 当前进度(0-100) */ - fun getProgress() : Int{ + fun getProgress(): Int { return mProgress } @@ -103,7 +112,7 @@ class CircularProgressView @JvmOverloads constructor( * 设置当前进度 * @param progress 当前进度(0-100) */ - fun setProgress(progress : Int){ + fun setProgress(progress: Int) { mProgress = progress invalidate() } @@ -113,12 +122,12 @@ class CircularProgressView @JvmOverloads constructor( * @param progress 当前进度(0-100) * @param animTime 动画时间(毫秒) */ - fun setProgress(progress : Int, animTime : Long){ - if (animTime<=0){ + fun setProgress(progress: Int, animTime: Long) { + if (animTime <= 0) { setProgress(progress) - } else{ + } else { val animator = ValueAnimator.ofInt(mProgress, progress) - animator.addUpdateListener{ + animator.addUpdateListener { mProgress = it.animatedValue as Int invalidate() } @@ -132,7 +141,7 @@ class CircularProgressView @JvmOverloads constructor( * 设置背景圆环宽度 * @param width 背景圆环宽度 */ - fun setBackWidth(width : Int){ + fun setBackWidth(width: Int) { mBackPaint.strokeWidth = width.toFloat() invalidate() } @@ -141,8 +150,8 @@ class CircularProgressView @JvmOverloads constructor( * 设置背景圆环颜色 * @param color 背景圆环颜色 */ - fun setBackColor(color : Int){ - mBackPaint.color = ContextCompat.getColor(context,color) + fun setBackColor(color: Int) { + mBackPaint.color = ContextCompat.getColor(context, color) invalidate() } @@ -150,39 +159,50 @@ class CircularProgressView @JvmOverloads constructor( * 设置进度圆环宽度 * @param width 进度圆环宽度 */ - fun setProgWidth(width : Int){ + fun setProgWidth(width: Int) { mProgPaint.strokeWidth = width.toFloat() invalidate() } /** - * 设置进度圆环颜色 + * 设置进度圆环渐变色起始色 * @param color 景圆环颜色 */ - fun setProgColor(color : Int){ - mProgPaint.color = ContextCompat.getColor(context,color) + fun setProgColor(color: Int) { + mProgPaint.color = ContextCompat.getColor(context, color) mProgPaint.shader = null invalidate() } - fun setProgColor(startColor : Int,endColor: Int){ - mColorArray = intArrayOf(ContextCompat.getColor(context,startColor),ContextCompat.getColor(context,endColor)) + + /** + * 渐变色结束色 + */ + fun setProgFirstColor(color: Int) { + mProgPaint.color = ContextCompat.getColor(context, color) + mProgPaint.shader = null + invalidate() + } + + + fun setProgColor(startColor: Int, endColor: Int) { + mColorArray = intArrayOf(ContextCompat.getColor(context, startColor), ContextCompat.getColor(context, endColor)) mColorArray?.let { mProgPaint.shader = LinearGradient(0f, 0f, 0f, - getMeasuredWidth().toFloat(), it, null, Shader.TileMode.MIRROR) + getMeasuredWidth().toFloat(), it, null, Shader.TileMode.MIRROR) } } - fun setProgColor(colorArray : IntArray){ + fun setProgColor(colorArray: IntArray) { colorArray.let { - if(it.size<2){ + if (it.size < 2) { return } mColorArray = it.copyOf() - mColorArray?.let{ + mColorArray?.let { mProgPaint.shader = LinearGradient(0f, 0f, 0f, - getMeasuredWidth().toFloat(), it, null, Shader.TileMode.MIRROR) + getMeasuredWidth().toFloat(), it, null, Shader.TileMode.MIRROR) } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java new file mode 100644 index 0000000000..97ab6a6dcd --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java @@ -0,0 +1,190 @@ +package com.mogo.eagle.core.function.hmi.ui.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.animation.LinearInterpolator; +import android.view.animation.RotateAnimation; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotVehicleStateListener; +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; +import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotVehicleStateListenerManager; +import com.mogo.eagle.core.function.hmi.R; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; + +import org.jetbrains.annotations.NotNull; + +import chassis.Chassis; +import mogo.telematics.pad.MessagePad; +import mogo_msg.MogoReportMsg; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS_P; + +/** + * @author Jing + * @description 方向盘 + * 方向盘跟随CAN数据做旋转 + * 档位随CAN数据做切换和高亮显示 + * @since: 4/7/22 + */ +public class SteeringWheelView extends ConstraintLayout { + private static final String TAG = "SteeringWheelView"; + private ImageView autopilotIV; + private TextView steeringTV; + private TapPositionView tapPositionView; + private CircularProgressView steeringCircularV; + private RotateAnimation rotateAnimation; + private float fromDegrees = 0;//方向盘旋转起始位置 + + public SteeringWheelView(@NonNull Context context) { + super(context); + Log.d(TAG, "1"); + } + + public SteeringWheelView(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + Log.d(TAG, "2"); + LayoutInflater.from(context).inflate(R.layout.hmi_steering_wheel, this); + initView(); + CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, mGoAutopilotStatusListener); + CallerAutopilotVehicleStateListenerManager.INSTANCE.addListener(TAG, mIMoGoAutopilotVehicleStateListener); + } + + private void initView() { + autopilotIV = (ImageView) findViewById(R.id.autopilot_iv); + steeringTV = findViewById(R.id.steering_tv); + tapPositionView = findViewById(R.id.tap_position); + steeringCircularV = findViewById(R.id.steering_circular); + steeringCircularV.setBackWidth(8); + steeringCircularV.setBackColor(R.color.hmi_light_blue_00); + steeringCircularV.setProgColor(R.color.hmi_light_blue, R.color.hmi_dark_blue); + steeringCircularV.setProgress(10, 1000); + } + + public SteeringWheelView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + Log.d(TAG, "3"); + } + + public SteeringWheelView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + Log.d(TAG, "4"); + } + + private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener() { + @Override + public void onAutopilotArriveAtStation(@org.jetbrains.annotations.Nullable MessagePad.ArrivalNotification arrivalNotification) { + + } + + @Override + public void onAutopilotGuardian(@Nullable MogoReportMsg.MogoReportMessage guardianInfo) { + + } + + @Override + public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { + if (autopilotStatusInfo == null) return; + int state = autopilotStatusInfo.getState(); + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "state = %s", state); + if (autopilotIV != null) { + Log.d(TAG, "autopilotIV != null"); + if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { + + autopilotIV.setImageResource(R.drawable.bg_auto); + + } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { + autopilotIV.setImageResource(R.drawable.bg_auto_nor); + + } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { + autopilotIV.setImageResource(R.drawable.bg_auto_nor); + } + } else { + Log.d(TAG, "autopilotIV=null"); + } + } + + @Override + public void onAutopilotSNRequest() { + + } + }; + + private final IMoGoAutopilotVehicleStateListener mIMoGoAutopilotVehicleStateListener = new IMoGoAutopilotVehicleStateListener() { + /** + * 车辆转向灯 + * @param lightSwitch + */ + @Override + public void onAutopilotLightSwitchData(@org.jetbrains.annotations.Nullable Chassis.LightSwitch lightSwitch) { + Log.d(TAG, "车辆转向灯:" + lightSwitch.toString()); + } + + /** + * 刹车灯 + * @param brakeLight + */ + @Override + public void onAutopilotBrakeLightData(boolean brakeLight) { + Log.d(TAG, "刹车灯:" + String.valueOf(brakeLight)); + } + + @Override + public void onAutopilotSteeringData(float steering) { + if (steeringTV != null && String.valueOf(steering) != null) { + steeringTV.setText(String.valueOf(steering) + "°"); + steeringCircularV.setProgress((int) steering, 1000); + animationWithSteeringData(steering); + } else { + Log.d(TAG, "steering未呈现"); + } + } + + /** + * 档位 + * @param gear + */ + @Override + public void onAutopilotGearData(@NotNull Chassis.GearPosition gear) { + Log.d(TAG, "档位" + gear.toString()); + if (tapPositionView != null) { + tapPositionView.updateWithGear(gear); + } + } + }; + + /** + * 方向盘随CAN数据做方向和角度旋转 + * 参数1从哪一个旋转角度开始 + * 参数2:转到什么角度 + * 后4个参数用于设置围绕着旋转的圆的圆心在哪里 + * 参数3:肯定x轴坐标的类型,有ABSOLUT绝对坐标、RELATIVE_TO_SELF相对于自身坐标、RELATIVE_TO_PARENT相对于父控件的坐标 + * 参数4:x轴的值,0.5f代表是以自身这个控件的一半长度为x轴 + * 参数5:肯定y轴坐标的类型 + * 参数6:y轴的值,0.5f代表是以自身这个控件的一半长度为x轴 + * + * @param steering + */ + private void animationWithSteeringData(float steering) { + Log.d(TAG, "方向盘转动" + String.valueOf(steering)); + rotateAnimation = new RotateAnimation(fromDegrees, steering, + RotateAnimation.RELATIVE_TO_SELF, 0.5f, + RotateAnimation.RELATIVE_TO_SELF, 0.5f); + rotateAnimation.setDuration(1000);//旋转时长 + rotateAnimation.setFillAfter(true);//旋转后保持原状 + autopilotIV.clearAnimation(); + autopilotIV.startAnimation(rotateAnimation); + fromDegrees = steering; + } + +} diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/TapPositionView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/TapPositionView.java new file mode 100644 index 0000000000..1a655e3660 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/TapPositionView.java @@ -0,0 +1,80 @@ +package com.mogo.eagle.core.function.hmi.ui.widget; + +import android.content.Context; +import android.graphics.Color; +import android.util.AttributeSet; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.mogo.eagle.core.function.hmi.R; + +import org.jetbrains.annotations.NotNull; + +import chassis.Chassis; + +/** + * @author Jing + * @description 方向盘下方的档位 + * @since: 4/7/22 + */ +public class TapPositionView extends ConstraintLayout { + private static final String TAG = "TapPositionView"; + private TextView tabP; + private TextView tabR; + private TextView tabN; + private TextView tabD; + + public TapPositionView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + Log.d(TAG, "2"); + LayoutInflater.from(context).inflate(R.layout.hmi_tap_position, this); + tabP = findViewById(R.id.tap_p); + tabR = findViewById(R.id.tap_r); + tabN = findViewById(R.id.tap_n); + tabD = findViewById(R.id.tap_d); + } + + public void updateWithGear(@NotNull Chassis.GearPosition gear) { + if (tabP != null && tabR != null && tabN != null && tabD != null) { + switch (gear) { + case GEAR_NONE: + tabP.setTextColor(Color.parseColor("#6E8EC9")); + tabR.setTextColor(Color.parseColor("#6E8EC9")); + tabN.setTextColor(Color.parseColor("#6E8EC9")); + tabD.setTextColor(Color.parseColor("#6E8EC9")); + break; + case GEAR_P: + tabP.setTextColor(Color.parseColor("#0043FF")); + tabR.setTextColor(Color.parseColor("#6E8EC9")); + tabN.setTextColor(Color.parseColor("#6E8EC9")); + tabD.setTextColor(Color.parseColor("#6E8EC9")); + break; + case GEAR_R: + tabR.setTextColor(Color.parseColor("#0043FF")); + tabP.setTextColor(Color.parseColor("#6E8EC9")); + tabN.setTextColor(Color.parseColor("#6E8EC9")); + tabD.setTextColor(Color.parseColor("#6E8EC9")); + break; + case GEAR_N: + tabN.setTextColor(Color.parseColor("#0043FF")); + tabR.setTextColor(Color.parseColor("#6E8EC9")); + tabP.setTextColor(Color.parseColor("#6E8EC9")); + tabD.setTextColor(Color.parseColor("#6E8EC9")); + break; + case GEAR_D: + tabD.setTextColor(Color.parseColor("#0043FF")); + tabN.setTextColor(Color.parseColor("#6E8EC9")); + tabR.setTextColor(Color.parseColor("#6E8EC9")); + tabP.setTextColor(Color.parseColor("#6E8EC9")); + break; + default: + break; + } + } + } +} diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/bus_shache_nor_daytime.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/bus_shache_nor_daytime.png new file mode 100644 index 0000000000..d16d1ce141 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/bus_shache_nor_daytime.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_auto.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_auto.png new file mode 100644 index 0000000000..748625a43c Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_auto.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_auto_nor.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_auto_nor.png new file mode 100644 index 0000000000..a9965aaf1f Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_auto_nor.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_steering_outer.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_steering_outer.xml new file mode 100644 index 0000000000..f5e1da1a55 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_steering_outer.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_steering_wheel.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_steering_wheel.xml new file mode 100644 index 0000000000..156cc4f0e0 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_steering_wheel.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_in_steering.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_in_steering.png new file mode 100644 index 0000000000..4545e67555 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_in_steering.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/streeing_wheel_rotate.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/streeing_wheel_rotate.xml new file mode 100644 index 0000000000..a883260939 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/streeing_wheel_rotate.xml @@ -0,0 +1,18 @@ + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/brakelight_background_daytime.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/brakelight_background_daytime.xml new file mode 100644 index 0000000000..6c257d12d7 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/brakelight_background_daytime.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml index b24ba66e08..f2b87a5de9 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml @@ -137,8 +137,8 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/hmi_tap_position.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/hmi_tap_position.xml new file mode 100644 index 0000000000..5020791857 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/hmi_tap_position.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml index 3e39181da0..ca5882f47d 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml @@ -37,7 +37,7 @@ app:layout_constraintEnd_toEndOf="parent" /> - + diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_brake_light_status_daytime.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_brake_light_status_daytime.xml new file mode 100644 index 0000000000..1996b061ac --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_brake_light_status_daytime.xml @@ -0,0 +1,44 @@ + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_turn_light_status.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_turn_light_status.xml index d2dd2a6052..4127b7d4f3 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_turn_light_status.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_turn_light_status.xml @@ -38,8 +38,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left|center_vertical" - android:layout_marginLeft="10px" - android:layout_marginTop="5px" + android:layout_marginLeft="13px" + android:layout_marginTop="3px" android:src="@drawable/module_arrow_left_select_nor" android:visibility="gone" /> @@ -48,8 +48,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right|center_vertical" - android:layout_marginTop="5px" - android:layout_marginRight="10px" + android:layout_marginTop="3px" + android:layout_marginRight="13px" android:src="@drawable/module_arrow_right_select_nor" android:visibility="gone" /> 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 bd4ed43a04..7218d86231 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 @@ -46,6 +46,7 @@ #3B4577 #000000 + #E6FFFFFF #FFFFA28B #FFDA1100 @@ -53,4 +54,7 @@ #FF006D43 #FFFFE198 #FFFF9B00 + #45D3FF + #1B5BFF + #0045D3FF \ 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 79e0076a1b..3641ccb612 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 @@ -37,10 +37,12 @@ 1066px 60px - 270px + 275px 120px 460px 120px + 220px + 120px 225px 154px diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/IdentifyDataDrawer.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/IdentifyDataDrawer.java index 8c989e773c..f56a931402 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/IdentifyDataDrawer.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/IdentifyDataDrawer.java @@ -1,15 +1,18 @@ package com.mogo.eagle.core.function.map; +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_HMI; + +import android.annotation.SuppressLint; import android.content.Context; import com.mogo.commons.AbsMogoApplication; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.data.enums.TrafficTypeEnum; -import com.mogo.eagle.core.data.traffic.TrafficData; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.map.MogoMarkerManager; import com.mogo.module.common.MogoApisHandler; +import com.mogo.module.common.utils.DrivingDirectionUtils; import java.util.ArrayList; import java.util.List; @@ -31,12 +34,12 @@ public class IdentifyDataDrawer { /** * 上一帧数据的缓存 */ - private static final ConcurrentHashMap mMarkersCaches = new ConcurrentHashMap<>(); + private static final ConcurrentHashMap mMarkersCaches = new ConcurrentHashMap<>(); /** * 已经感知不到的脏数据 */ - private final ConcurrentHashMap mDirtyPositions = new ConcurrentHashMap<>(); + private final ConcurrentHashMap firstData = new ConcurrentHashMap<>(); /** * 记录每次实际绘制的交通元素UUID */ @@ -71,6 +74,7 @@ public class IdentifyDataDrawer { * * @param resultList adas感知融合数据 */ + @SuppressLint("NewApi") public void renderAdasRecognizedResult(List resultList) { if (resultList == null || resultList.isEmpty()) { clearOldMarker(); @@ -84,35 +88,32 @@ public class IdentifyDataDrawer { return; } - // 循环将集合中的数据提取记录 - - for (MessagePad.TrackedObject trafficData : resultList) { - // 过滤掉未知感知数据 - if (!FunctionBuildConfig.isDrawUnknownIdentifyData && - trafficData.getType() == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.getType()) { - //CallerLogger.INSTANCE.w(TAG, "未知感知类型数据,丢弃,不渲染"); - continue; + long start = System.currentTimeMillis(); + //清除缓存 + for (MessagePad.TrackedObject data : resultList) { + if (trafficDataUuidList.size() > 0 && trafficDataUuidList.contains("" + data.getUuid())) { + trafficDataUuidList.remove("" + data.getUuid()); } - trafficDataUuidList.add("" + trafficData.getUuid()); } -// // 找出上一针数据中已经不在本次数据中存在的数据 -// for (String uuid : mMarkersCaches.keySet()) { -// if (!trafficDataUuidList.contains(uuid)) { -// mDirtyPositions.put(uuid, mMarkersCaches.get(uuid)); -// } -// } -// // 移除脏数据 -// for (String uuid : mDirtyPositions.keySet()) { -// MogoApisHandler.getInstance().getApis() -// .getMapServiceApi() -// .getMarkerManager(mContext) -// .removeMarker(uuid); -// } + trafficDataUuidList.forEach(uuid -> { + mMarkersCaches.remove(uuid); + }); - // 绘制新数据 - MogoMarkerManager.getInstance(mContext) - .updateBatchMarkerPosition(filterTrafficData(resultList)); + CallerLogger.INSTANCE.d(M_HMI + "arrow47", "origin data size : " + resultList.size()); + ArrayList filterList = filterTrafficData(resultList); + long cost = System.currentTimeMillis() - start; + CallerLogger.INSTANCE.d(M_HMI + "arrow47", "cost : " + cost); + + if (filterList.size() > 0) { + // 绘制新数据 + MogoMarkerManager.getInstance(mContext) + .updateBatchMarkerPosition(filterList); + } + + CallerLogger.INSTANCE.d(M_HMI + "arrow47", "first data size : " + firstData.size() + " , mMarkersCaches : " + mMarkersCaches.size()); + // 首次未添加的感知物在调用完绘制方法后再塞入cache map + mMarkersCaches.putAll(firstData); } /** @@ -121,14 +122,46 @@ public class IdentifyDataDrawer { * @return 过滤后的数据集合 */ private ArrayList filterTrafficData(List trafficData) { + firstData.clear(); mFilterTrafficData.clear(); + trafficDataUuidList.clear(); for (MessagePad.TrackedObject data : trafficData) { // 过滤掉未知感知数据 - if (data.getType() == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.getType()) { + if (!FunctionBuildConfig.isDrawUnknownIdentifyData && data.getType() == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.getType()) { //CallerLogger.INSTANCE.w(TAG, "未知感知类型数据,丢弃,不渲染"); continue; } - mFilterTrafficData.add(data); + + //首次过来的数据不添加,首次未添加的感知物在调用完绘制方法后再塞入cache map + MessagePad.TrackedObject cacheData = mMarkersCaches.get("" + data.getUuid()); + if (cacheData != null) { + MessagePad.TrackedObject correctData = null; + //todo 进行修正 + if (Math.abs(cacheData.getHeading() - data.getHeading()) > 40 && Math.abs(cacheData.getHeading() - data.getHeading()) < 90) { + CallerLogger.INSTANCE.d(M_HMI + "arrow47", "uuid: " + data.getUuid() + " , 40~90差值范围 , 上一帧 : " + cacheData.getHeading() + " , 当前帧 : " + data.getHeading()); + } + if (Math.abs(cacheData.getHeading() - data.getHeading()) > 90) { + int degree = DrivingDirectionUtils.getDegreeOfCar2Poi(cacheData.getLongitude(), cacheData.getLatitude(), data.getLongitude(), data.getLatitude(), Double.valueOf(cacheData.getHeading()).intValue()); + if (degree > 90) { + CallerLogger.INSTANCE.d(M_HMI + "arrow47", "uuid: " + data.getUuid() + " , 夹角 : " + degree + " , 修正 上一帧 : " + cacheData.getHeading() + " , 当前帧 : " + data.getHeading()); + correctData = data.toBuilder().setHeading(cacheData.getHeading()).build(); + } else { + CallerLogger.INSTANCE.d(M_HMI + "arrow47", "uuid: " + data.getUuid() + " , 夹角 : " + degree + " , 未修正 上一帧 : " + cacheData.getHeading() + " , 当前帧 : " + data.getHeading()); + } + } + if (correctData != null) { + mFilterTrafficData.add(correctData); + //更新已存在的感知物体数据 + mMarkersCaches.put("" + data.getUuid(), correctData); + } else { + mFilterTrafficData.add(data); + //更新已存在的感知物体数据 + mMarkersCaches.put("" + data.getUuid(), data); + } + } else { + firstData.put("" + data.getUuid(), data); + } + trafficDataUuidList.add("" + data.getUuid()); } return mFilterTrafficData; } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/IdentifyDataDrawerTest.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/IdentifyDataDrawerTest.java new file mode 100644 index 0000000000..a5f40d4a71 --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/IdentifyDataDrawerTest.java @@ -0,0 +1,212 @@ +package com.mogo.eagle.core.function.map; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_HMI; + +import android.annotation.SuppressLint; +import android.content.Context; + +import com.mogo.commons.AbsMogoApplication; +import com.mogo.eagle.core.data.config.FunctionBuildConfig; +import com.mogo.eagle.core.data.enums.TrafficTypeEnum; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.MogoMap; +import com.mogo.map.MogoMarkerManager; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.module.common.constants.AdasRecognizedType; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +import mogo.telematics.pad.MessagePad; + +/** + * @author xiaoyuzhou + * @date 2021/10/19 10:45 上午 + * 域控制器识别信息绘制 + */ +public class IdentifyDataDrawerTest { + private static final String TAG = "IdentifyDataDrawer"; + + protected final Context mContext; + private static volatile IdentifyDataDrawerTest sInstance; + + /** + * 上一帧数据的缓存 + */ + private static final ConcurrentHashMap mMarkersCaches = new ConcurrentHashMap<>(); + + private static final ConcurrentHashMap algoCache = new ConcurrentHashMap<>(); + + /** + * 记录每次实际绘制的交通元素UUID + */ + private final ArrayList trafficDataUuidList = new ArrayList<>(); + /** + * 过滤后的数据集合 + */ + private final ArrayList mFilterTrafficData = new ArrayList<>(); + + private IdentifyDataDrawerTest() { + mContext = AbsMogoApplication.getApp(); + addPreVehicleModel(); + } + + public static IdentifyDataDrawerTest getInstance() { + if (sInstance == null) { + synchronized (IdentifyDataDrawerTest.class) { + if (sInstance == null) { + sInstance = new IdentifyDataDrawerTest(); + } + } + } + return sInstance; + } + + public synchronized void release() { + sInstance = null; + } + + /** + * 渲染 adas 识别的数据 + * + * @param resultList adas感知融合数据 + */ + @SuppressLint("NewApi") + public void renderAdasRecognizedResult(List resultList) { + if (resultList == null || resultList.isEmpty()) { + clearOldMarker(); + CallerLogger.INSTANCE.w(TAG, "感知数据为空无需渲染……"); + return; + } + + if (!MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { + clearOldMarker(); + CallerLogger.INSTANCE.w(TAG, "渲染 adas 识别的数据 当前不是VR模式"); + return; + } + + //清除缓存 + for (MessagePad.TrackedObject data : resultList) { + if (trafficDataUuidList.size() > 0 && trafficDataUuidList.contains("" + data.getUuid())) { + trafficDataUuidList.remove("" + data.getUuid()); + } + } + trafficDataUuidList.forEach(uuid -> { + mMarkersCaches.remove(uuid); + algoCache.remove(uuid); + }); + + ArrayList filterList = filterTrafficData(resultList); + if (filterList.size() > 0) { + // 绘制新数据 + MogoMarkerManager.getInstance(mContext) + .updateBatchMarkerPosition(filterList); + } + } + + /** + * 数据过滤器 + * + * @return 过滤后的数据集合 + */ + private ArrayList filterTrafficData(List trafficData) { + mFilterTrafficData.clear(); + trafficDataUuidList.clear(); + for (MessagePad.TrackedObject data : trafficData) { + // 过滤掉未知感知数据 + if (!FunctionBuildConfig.isDrawUnknownIdentifyData && data.getType() == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.getType()) { + //CallerLogger.INSTANCE.w(TAG, "未知感知类型数据,丢弃,不渲染"); + continue; + } + + MessagePad.TrackedObject cacheData = mMarkersCaches.get("" + data.getUuid()); + double heading = MogoMap.getInstance().getMogoMap().getUIController().getAngle(cacheData.getLongitude(), cacheData.getLatitude(), data.getLongitude(), data.getLatitude()); + CallerLogger.INSTANCE.d(M_HMI + "arrow47", " uuid : " + data.getUuid() + " , origin heading : " + data.getHeading() + " , correct heading : " + heading + " ---- " + (data.getHeading() - heading)); + +// double heading = kalmanFilter(data); + MessagePad.TrackedObject correctData = data.toBuilder().setHeading(heading).build(); + mFilterTrafficData.add(correctData); + //更新已存在的感知物体数据 + mMarkersCaches.put("" + correctData.getUuid(), correctData); + trafficDataUuidList.add("" + correctData.getUuid()); + } + return mFilterTrafficData; + } + + private double kalmanFilter(MessagePad.TrackedObject data) { + String uuid = "" + data.getUuid(); + if (algoCache.containsKey(uuid)) { + Object o = algoCache.get(uuid); + KalmanFilter kf = (KalmanFilter) o; + assert kf != null; + double[] lonLat = kf.filter(data.getLongitude(), data.getLatitude()); + algoCache.put(uuid, kf); + MessagePad.TrackedObject cacheTrackObj = mMarkersCaches.get(uuid); + assert cacheTrackObj != null; + double heading = MogoMap.getInstance().getMogoMap().getUIController().getAngle(cacheTrackObj.getLongitude(), cacheTrackObj.getLatitude(), lonLat[0], lonLat[1]); + CallerLogger.INSTANCE.d(M_HMI + "arrow47", " uuid : " + uuid + " , origin heading : " + data.getHeading() + " , correct heading : " + heading + " ---- " + (data.getHeading() - heading)); + return heading; + } else { + double r = 0.00005; + if (AdasRecognizedType.valueFrom(data.getType()) == AdasRecognizedType.classIdTrafficBus || AdasRecognizedType.valueFrom(data.getType()) == AdasRecognizedType.classIdTrafficTruck) { + r = 0.0001; + } + algoCache.put(uuid, new KalmanFilter(data.getLongitude(), data.getLatitude(), r)); + return data.getHeading(); + } + } + + /** + * 清除旧的 marker 数据 + */ + public void clearOldMarker() { + for (String uuid : trafficDataUuidList) { + MogoMarkerManager.getInstance(mContext) + .removeMarker(uuid); + } + trafficDataUuidList.clear(); + } + + private void addPreVehicleModel() { + CallerLogger.INSTANCE.d(TAG, "添加感知模型到地图中……"); + addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI, "添加感知模型到地图中……preVehicleStrWeiZhi="); + + addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE, "添加感知模型到地图中……preVehicleStrPeople="); + + addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_BICYCLE, "添加感知模型到地图中……preVehicleStrBicycle="); + + addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE, "添加感知模型到地图中……preVehicleStrTaChe="); + + addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_MOTO, "添加感知模型到地图中……preVehicleStrMoto="); + + addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_BUS, "添加感知模型到地图中……preVehicleStrBus="); + + addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_TRUCK, "添加感知模型到地图中……preVehicleStrTruck="); + } + + /** + * 添加模型到地图中 + * + * @param typeTrafficIdWeiZhi + * @param s + */ + private void addPreVehicleModelWeiZhi(TrafficTypeEnum typeTrafficIdWeiZhi, String s) { + String preVehicleStrWeiZhi = MogoMarkerManager.getInstance(mContext) + .addPreVehicleModel(typeTrafficIdWeiZhi.getType(), + typeTrafficIdWeiZhi.getTraffic3DIconId()); + CallerLogger.INSTANCE.d(TAG, s + preVehicleStrWeiZhi); + + if (preVehicleStrWeiZhi == null) { + UiThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + CallerLogger.INSTANCE.w(TAG, "添加感知模型到地图中失败,尝试重复添加……"); + addPreVehicleModelWeiZhi(typeTrafficIdWeiZhi, s); + } + }, 1000L); + } + } + +} diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/KalmanFilter.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/KalmanFilter.java new file mode 100644 index 0000000000..08605437fa --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/KalmanFilter.java @@ -0,0 +1,34 @@ +package com.mogo.eagle.core.function.map; + +public class KalmanFilter { + private final double q = 1.0E-6D; + double r = 5.0E-5D; + double[][] xhat = new double[][]{{0.0D, 0.0D}, {0.0D, 0.0D}}; + double[][] p = new double[][]{{1.0D, 1.0D}, {0.0D, 0.0D}}; + double[][] xhatminus = new double[][]{{0.0D, 0.0D}, {0.0D, 0.0D}}; + double[][] pMinus = new double[][]{{0.0D, 0.0D}, {0.0D, 0.0D}}; + double[][] k = new double[][]{{0.0D, 0.0D}, {0.0D, 0.0D}}; + int idx = 1; + + public KalmanFilter(double lon, double lat, double r) { + this.xhat[0][0] = lon; + this.xhat[0][1] = lat; + this.r = r; + } + + public double[] filter(double lon, double lat) { + for(int i = 0; i < 2; ++i) { + this.xhatminus[this.idx][i] = this.xhat[1 - this.idx][i]; + this.pMinus[this.idx][i] = this.p[1 - this.idx][i] + 1.0E-6D; + this.k[this.idx][i] = this.pMinus[this.idx][i] / (this.pMinus[this.idx][i] + this.r); + double value = i == 0 ? lon : lat; + this.xhat[this.idx][i] = this.xhatminus[this.idx][i] + this.k[this.idx][i] * (value - this.xhatminus[this.idx][i]); + this.p[this.idx][i] = (1.0D - this.k[this.idx][i]) * this.pMinus[this.idx][i]; + } + + double lon1 = this.xhat[this.idx][0]; + double lat1 = this.xhat[this.idx][1]; + this.idx = 1 - this.idx; + return new double[]{lon1, lat1}; + } +} diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java index 0531987cb2..ecbb52d6be 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java @@ -262,7 +262,7 @@ public class SmallMapDirectionView new PolylineOptions() .addAll(mCoordinatesLatLng) .color(Color.argb(255, 31, 127, 255)) - .width(5)); + .width(6)); } // else { diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_end.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_end.png index f3cb78aed4..f030e6887d 100644 Binary files a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_end.png and b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_end.png differ diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_start.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_start.png index 4d2a797823..9a7f520b33 100644 Binary files a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_start.png and b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_start.png differ diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/TrafficLightHMIManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/TrafficLightHMIManager.kt index 08e0e109ee..66ce2bb505 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/TrafficLightHMIManager.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/TrafficLightHMIManager.kt @@ -40,20 +40,20 @@ class TrafficLightHMIManager { trafficLightStatus.isGreen() || trafficLightStatus.isFlashGreen() -> { CallerHmiManager.showWarningTrafficLight(3) CallerHmiManager.changeCountdownGreen(remain) - CallerHmiManager.changeCountdownRed(-1) - CallerHmiManager.changeCountdownYellow(-1) +// CallerHmiManager.changeCountdownRed(-1) +// CallerHmiManager.changeCountdownYellow(-1) } trafficLightStatus.isYellow() -> { CallerHmiManager.showWarningTrafficLight(2) CallerHmiManager.changeCountdownYellow(remain) - CallerHmiManager.changeCountdownGreen(-1) - CallerHmiManager.changeCountdownRed(-1) +// CallerHmiManager.changeCountdownGreen(-1) +// CallerHmiManager.changeCountdownRed(-1) } trafficLightStatus.isRed() -> { CallerHmiManager.showWarningTrafficLight(1) CallerHmiManager.changeCountdownRed(remain) - CallerHmiManager.changeCountdownGreen(-1) - CallerHmiManager.changeCountdownYellow(-1) +// CallerHmiManager.changeCountdownGreen(-1) +// CallerHmiManager.changeCountdownYellow(-1) } } } diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/OverlayViewUtils.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/OverlayViewUtils.java new file mode 100644 index 0000000000..e65a5b3c52 --- /dev/null +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/OverlayViewUtils.java @@ -0,0 +1,93 @@ +package com.mogo.eagle.core.utilcode.util; + +import android.app.Activity; +import android.content.Context; +import android.view.View; +import android.view.WindowManager; +import android.view.WindowManager.LayoutParams; + +/** + * 遮罩层工具类 + * + * @author mogoauto + */ +public class OverlayViewUtils { + private static final String TAG = "OverlayViewUtils"; + + private static WindowManager windowManager; + private static Context applicationContext; + private static volatile boolean isShowing = false; + + /** + * 记录上一次的View + */ + private static View lastOverlayView; + + /** + * 添加覆盖View在Activity上面 + */ + public static void showOverlayView(Activity context, View overlayView) { + if (applicationContext == null) { + applicationContext = context.getApplicationContext(); + } + + if (windowManager == null) { + windowManager = context.getWindowManager(); + } + + // 设置View显示模式,沉浸式的侵入到状态栏,导航栏 + overlayView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + + LayoutParams params = new LayoutParams(); + params.width = LayoutParams.MATCH_PARENT; + params.height = LayoutParams.MATCH_PARENT; + params.alpha = 1.0f; + // 设置窗口类型为应用子窗口,和PopupWindow同类型 + params.type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; + // 没有边界限制,允许窗口扩展到屏幕外 + params.flags = WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; + + + // 如果正在展示中,并且lastOverlayView不为null,先做移除操作,保证覆盖在最上面的View只有一个,防止叠加导致无法移除 + if (lastOverlayView != null) { + dismissOverlayView(lastOverlayView); + } + + try { + // 后门逻辑,长时间触摸消失 + overlayView.setOnLongClickListener(v -> { + dismissOverlayView(lastOverlayView); + return true; + }); + lastOverlayView = overlayView; + windowManager.addView(overlayView, params); + isShowing = true; + } catch (Exception e) { + e.printStackTrace(); + } + + } + + /** + * 移除覆盖View在Activity上面 + */ + public static void dismissOverlayView(View overlayView) { + if (!isShowing) { + return; + } + try { + if (windowManager != null && overlayView != null) { + windowManager.removeView(overlayView); + } + isShowing = false; + } catch (Exception e) { + e.printStackTrace(); + } + } + + +} diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/IPCFixationIPHelper.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/IPCFixationIPHelper.java index ce43c5d3a6..37d5d9358c 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/IPCFixationIPHelper.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/IPCFixationIPHelper.java @@ -124,7 +124,7 @@ public class IPCFixationIPHelper { public void run() { start(ips); } - }, 5 * 1000L);//延时 + }, 4 * 1000L);//延时 } } } @@ -135,7 +135,7 @@ public class IPCFixationIPHelper { Process p; try { //ping -c 3 -w 100 中 ,-c 是指ping的次数 3是指ping 3次 ,-w 100 以秒为单位指定超时间隔,是指超时时间为100秒 - p = Runtime.getRuntime().exec("ping -c 2 -w 5 " + str); + p = Runtime.getRuntime().exec("ping -c 2 -w 2 " + str); int status = p.waitFor(); InputStream input = p.getInputStream(); BufferedReader in = new BufferedReader(new InputStreamReader(input)); diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java index 4e857e76e7..30b82afadf 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java @@ -77,9 +77,9 @@ public class FpgaSocket implements IWebSocket { } if (okBuilder == null) { okBuilder = new OkHttpClient.Builder(); - okBuilder.writeTimeout(5, TimeUnit.SECONDS) - .readTimeout(5, TimeUnit.SECONDS) - .connectTimeout(5, TimeUnit.SECONDS); + okBuilder.writeTimeout(4, TimeUnit.SECONDS) + .readTimeout(4, TimeUnit.SECONDS) + .connectTimeout(1, TimeUnit.SECONDS); } if (client == null) { client = okBuilder.build(); @@ -117,7 +117,7 @@ public class FpgaSocket implements IWebSocket { if (isReconnect) { if (!isUserCloseWebSocket) { try { - Thread.sleep(5000L); + Thread.sleep(2000L); } catch (InterruptedException e) { e.printStackTrace(); } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java index dcf235541d..11b968b840 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java @@ -1,6 +1,5 @@ package com.mogo.map; -import com.mogo.eagle.core.data.traffic.TrafficData; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.map.overlay.IMogoPolyline; diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java index 65cb31af57..9ae3db58a1 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java @@ -352,4 +352,10 @@ public interface IMogoMapUIController { * 设置地图视线角度 */ void setMapDAngle(float angle); + + /** + * 获取行车方向 + * @return + */ + float getAngle(double startLon, double startLat, double endLon, double endLat); } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java index 6881bc8434..f18918c184 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java @@ -1079,4 +1079,9 @@ public class AMapViewWrapper implements IMogoMapView, mMapView.getMapAutoViewHelper().setMapDAngle(angle); } + @Override + public float getAngle(double startLon, double startLat, double endLon, double endLat) { + return MapAutoApi.INSTANCE.getAngle(startLon,startLat,endLon,endLat); + } + } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java index d0e275cd76..0eaa831de4 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java @@ -454,4 +454,13 @@ public class MogoMapUIController implements IMogoMapUIController { mDelegate.setMapDAngle(angle); } } + + @Override + public float getAngle(double startLon, double startLat, double endLon, double endLat) { + initDelegate(); + if (mDelegate != null) { + return mDelegate.getAngle(startLon, startLat, endLon, endLat); + } + return 0.0f; + } } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java index 39051ccaf9..38fc9ebdae 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java @@ -374,4 +374,12 @@ public class AMapUIController implements IMogoMapUIController { mClient.setMapDAngle(angle); } } + + @Override + public float getAngle(double startLon, double startLat, double endLon, double endLat) { + if (mClient != null) { + return mClient.getAngle(startLon,startLat,endLon,endLat); + } + return 0; + } } diff --git a/modules/mogo-module-common/build.gradle b/modules/mogo-module-common/build.gradle index 68289ac3e8..af317b04ce 100644 --- a/modules/mogo-module-common/build.gradle +++ b/modules/mogo-module-common/build.gradle @@ -81,6 +81,7 @@ dependencies { } else { api project(":libraries:mogo-map") api project(":libraries:mogo-map-api") + implementation project(':libraries:mogo-adas-data') api project(":foudations:mogo-commons") api project(':services:mogo-service-api') api project(':core:mogo-core-utils') diff --git a/modules/mogo-module-common/src/main/res/values-xhdpi-2560x1600/dimens.xml b/modules/mogo-module-common/src/main/res/values-xhdpi-2560x1600/dimens.xml index 3fec33a8e2..e8a50c2de8 100644 --- a/modules/mogo-module-common/src/main/res/values-xhdpi-2560x1600/dimens.xml +++ b/modules/mogo-module-common/src/main/res/values-xhdpi-2560x1600/dimens.xml @@ -11,5 +11,6 @@ 120px 37px 27px - + 144px + 300px diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/MogoRouteOverlayManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/MogoRouteOverlayManager.java index 1f0a18821a..7ad39389d2 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/MogoRouteOverlayManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/MogoRouteOverlayManager.java @@ -180,6 +180,8 @@ public class MogoRouteOverlayManager implements } // CallerLogger.INSTANCE.d(M_OLD_ROUTE + TAG , "onLocationChanged: size = "+ mTrajectoryList.size()+" ----- "+mLocation.getLongitude()+"-"+mLocation.getLatitude()); ArrayList list = new ArrayList(); + MogoLatLng carlatLng = new MogoLatLng(CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84Lat(),CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84Lon()); + list.add(carlatLng); for (MogoLatLng latLng : temp) { // if(!isPointOnCarFront(mLocation,latLng)){ list.add(latLng); @@ -191,6 +193,7 @@ public class MogoRouteOverlayManager implements } } + public boolean isPointOnCarFront(MogoLocation carLocal, MogoLatLng pointLocal) { double carLon = carLocal.getLongitude(); double carLat = carLocal.getLatitude(); diff --git a/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java b/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java index 9e3b4eb108..385e073181 100644 --- a/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java +++ b/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java @@ -53,10 +53,10 @@ public class ApmCrashReportProvider implements ITestCrashReportProvider { return map; } }); - crash.config().setChannel("eagle"); + String mapSDKVersion = AppUtils.getCustomMapSDKVersion(context); + crash.config().setChannel("MAP_SDK_VERSION:"+mapSDKVersion); //可选,可以设置自定义did,不设置会使用内部默认的 crash.config().setDeviceId(MoGoAiCloudClientConfig.getInstance().getSn()); - String mapSDKVersion = AppUtils.getCustomMapSDKVersion(context); crash.addTags(MAP_SDK_VERSION, mapSDKVersion); // crash.setReportUrl("www.xxx.com"); // 私有化部署:私有化部署才配置上报地址 // crash.addTags("key", "value"); // 自定义筛选tag, 按需添加、可多次覆盖 @@ -66,6 +66,7 @@ public class ApmCrashReportProvider implements ITestCrashReportProvider { dimension.put("Devices_SN_DeviceId", MoGoAiCloudClientConfig.getInstance().getSn() + "__" + DeviceIdUtils.getDeviceId(context)); dimension.put("Devices_SN_WidevineID_MD5", MoGoAiCloudClientConfig.getInstance().getSn() + "__" + DeviceIdUtils.getWidevineIDWithMd5(context)); dimension.put("Devices_SN_WidevineID", MoGoAiCloudClientConfig.getInstance().getSn() + "__" + DeviceIdUtils.getWidevineID(context)); + dimension.put(MAP_SDK_VERSION, mapSDKVersion); HashMap metric = new HashMap<>(); //指标值 //metric.put("Devices_ID_metric", (double) 100); @@ -95,7 +96,7 @@ public class ApmCrashReportProvider implements ITestCrashReportProvider { //是否打印日志,注:线上release版本要配置为false builder.debugMode(true); //支持用户自定义user_id把平台数据和自己用户关联起来,可以不配置 - builder.userId(MoGoAiCloudClientConfig.getInstance().getSn()); +// builder.userId(MoGoAiCloudClientConfig.getInstance().getSn()); //私有化部署:配置数据上报的域名 (私有化部署才需要配置,内部有默认域名),测试支持设置http://www.xxx.com 默认是https协议 // builder.defaultReportDomain("www.xxx.com"); //设置渠道。1.3.16版本增加接口