[3.4.0-map-sdk] loc wgs84 opt , get instead of callback , add func of traffic light cross road
This commit is contained in:
@@ -13,14 +13,6 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<!--刹车、转向-->
|
||||
<com.mogo.eagle.core.function.hmi.ui.vehicle.SteeringBrakeView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
||||
@@ -14,7 +14,6 @@ import com.mogo.commons.module.status.MogoStatusManager
|
||||
import com.mogo.commons.module.status.StatusDescriptor
|
||||
import com.mogo.eagle.core.data.BaseData
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
@@ -33,11 +32,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
|
||||
import com.mogo.eagle.core.utilcode.util.CoordinateUtils
|
||||
import com.mogo.eagle.core.utilcode.util.DrivingDirectionUtils
|
||||
import com.mogo.eagle.core.utilcode.util.NetworkUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.mogo.eagle.core.utilcode.util.*
|
||||
import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManager
|
||||
import com.mogo.och.common.module.biz.common.socketmessage.data.OCHOperationalMessage
|
||||
import com.mogo.och.common.module.biz.constant.LoginStatusManager
|
||||
@@ -54,22 +49,9 @@ import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceM
|
||||
import com.mogo.och.common.module.map.AmapNaviToDestinationModel
|
||||
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjLocations
|
||||
import com.mogo.och.common.module.voice.VoiceNotice
|
||||
import com.mogo.och.taxi.bean.PrepareTaskRespBean
|
||||
import com.mogo.och.taxi.bean.QueryCarOrderByNoRespBean
|
||||
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
|
||||
import com.mogo.och.taxi.bean.StartServiceRespBean
|
||||
import com.mogo.och.taxi.bean.TrajectoryListRespBean
|
||||
import com.mogo.och.taxi.callback.IOCHTaxiAutopilotPlanningCallback
|
||||
import com.mogo.och.taxi.callback.ITaxiADASStatusCallback
|
||||
import com.mogo.och.taxi.callback.ITaxiCarServiceCallback
|
||||
import com.mogo.och.taxi.callback.ITaxiControllerStatusCallback
|
||||
import com.mogo.och.taxi.callback.ITaxiOrderStatusCallback
|
||||
import com.mogo.och.taxi.callback.ITaxiTaskWithOrderCallback
|
||||
import com.mogo.och.taxi.constant.TaskStatusEnum
|
||||
import com.mogo.och.taxi.constant.TaskTypeEnum
|
||||
import com.mogo.och.taxi.constant.TaxiCarServingStatusManager
|
||||
import com.mogo.och.taxi.constant.TaxiOrderStatusEnum
|
||||
import com.mogo.och.taxi.constant.TaxiUnmannedConst
|
||||
import com.mogo.och.taxi.bean.*
|
||||
import com.mogo.och.taxi.callback.*
|
||||
import com.mogo.och.taxi.constant.*
|
||||
import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.BUSINESSTYPE
|
||||
import com.mogo.och.taxi.network.TaxiTaskWithOrderServiceManager
|
||||
import com.mogo.och.taxi.ui.debug.DebugView
|
||||
@@ -84,8 +66,6 @@ import io.reactivex.schedulers.Schedulers
|
||||
import mogo.telematics.pad.MessagePad.ArrivalNotification
|
||||
import mogo.telematics.pad.MessagePad.GlobalPathResp
|
||||
import mogo_msg.MogoReportMsg.MogoReportMessage
|
||||
import system_master.SsmInfo
|
||||
import system_master.SystemStatusInfo
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
@@ -183,7 +163,7 @@ object TaxiTaskModel {
|
||||
return mCurrentTaskWithOrder
|
||||
}
|
||||
|
||||
fun getCurrentOrderTrajectoryList(): MutableList<TrajectoryListRespBean.Result>? {
|
||||
fun getCurrentOrderTrajectoryList(): MutableList<TrajectoryListRespBean.Result> {
|
||||
return mTaskTrajectoryList
|
||||
}
|
||||
|
||||
@@ -250,18 +230,26 @@ object TaxiTaskModel {
|
||||
* false: 暂停启动自驾
|
||||
*/
|
||||
fun handleBrakeStatusChange(brakeStatus: Boolean) {
|
||||
if (brakeStatus){
|
||||
mControllerStatusCallback?.resumeOpenAutopilotNonManual()
|
||||
}else{
|
||||
mControllerStatusCallback?.pauseOpenAutopilotNonManual()
|
||||
}
|
||||
if (brakeStatus) {
|
||||
mControllerStatusCallback?.resumeOpenAutopilotNonManual()
|
||||
} else {
|
||||
mControllerStatusCallback?.pauseOpenAutopilotNonManual()
|
||||
}
|
||||
}
|
||||
|
||||
private val mMogoAutopilotStatusListener: IMoGoAutopilotStatusListener =
|
||||
object : IMoGoAutopilotStatusListener {
|
||||
override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) {
|
||||
DebugView.printInfoMsg("[域控连接状态变化] status=$status, reason=${if (TextUtils.isEmpty(reason)) "" else reason}")
|
||||
DebugView.printInfoMsg(
|
||||
"[域控连接状态变化] status=$status, reason=${
|
||||
if (TextUtils.isEmpty(
|
||||
reason
|
||||
)
|
||||
) "" else reason
|
||||
}"
|
||||
)
|
||||
}
|
||||
|
||||
override fun onAutopilotGuardian(guardianInfo: MogoReportMessage?) {
|
||||
TaxiTrajectoryManager.getInstance().onAutopilotGuardian(guardianInfo)
|
||||
}
|
||||
@@ -295,7 +283,8 @@ object TaxiTaskModel {
|
||||
if ((FunctionBuildConfig.isDemoMode
|
||||
&& checkCurrentTaskCondition()
|
||||
&& QueryCurrentTaskRespBean.isStartTaskType(mCurrentTaskWithOrder)
|
||||
)){
|
||||
)
|
||||
) {
|
||||
// 当美化模式(演示模式)开启时:且有订单、且为去往目的地状态,维持自动驾驶icon开启状态
|
||||
return
|
||||
}
|
||||
@@ -305,20 +294,20 @@ object TaxiTaskModel {
|
||||
if ((FunctionBuildConfig.isDemoMode
|
||||
&& checkCurrentTaskCondition()
|
||||
&& QueryCurrentTaskRespBean.isStartTaskType(mCurrentTaskWithOrder)
|
||||
)
|
||||
)
|
||||
) {
|
||||
// 当美化模式(演示模式)开启时:且有订单、且为去往目的地状态,维持自动驾驶icon开启状态
|
||||
return
|
||||
}
|
||||
if (mADASStatusCallback != null) {
|
||||
mADASStatusCallback!!.onAutopilotDisable()
|
||||
}
|
||||
mADASStatusCallback?.onAutopilotDisable()
|
||||
} else if (state == IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING) {
|
||||
DebugView.printInfoMsg("[自驾状态变化] afterValue=STATUS_PARALLEL_DRIVING,meaning=平行驾驶中")
|
||||
if (FunctionBuildConfig.isDemoMode) {
|
||||
if ((checkCurrentTaskCondition()
|
||||
&& QueryCurrentTaskRespBean.isStartTaskType(mCurrentTaskWithOrder)
|
||||
)
|
||||
&& QueryCurrentTaskRespBean.isStartTaskType(
|
||||
mCurrentTaskWithOrder
|
||||
)
|
||||
)
|
||||
) { //订单中
|
||||
// 当美化模式(演示模式)开启时:且有订单、且为去往目的地状态,维持自动驾驶icon开启状态
|
||||
} else { //美化模式下没订单,显示人工驾驶
|
||||
@@ -330,7 +319,6 @@ object TaxiTaskModel {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onAutopilotSNRequest() {}
|
||||
override fun onAutopilotArriveAtStation(arrivalNotification: ArrivalNotification?) {
|
||||
i(TAG, "onAutopilotArriveAtStation = ${arrivalNotification.toString()}")
|
||||
DebugView.printInfoMsg("[MAP到站通知] 上报到站,location=${arrivalNotification?.endLocation}")
|
||||
@@ -354,9 +342,6 @@ object TaxiTaskModel {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onAutopilotStatusRespByQuery(status: SystemStatusInfo.StatusInfo) {}
|
||||
|
||||
override fun onSystemStatus(statusInf: SsmInfo.SsmStatusInf) {}
|
||||
}
|
||||
|
||||
private val mMogoStatusChangedListener: IMogoStatusChangedListener =
|
||||
@@ -402,7 +387,7 @@ object TaxiTaskModel {
|
||||
if (checkCurrentTaskCondition()) {
|
||||
d(TAG, "--------本地开始计算全路径数据---------- ")
|
||||
//转换成高德坐标系
|
||||
if (mCurrentTaskRoutePointsGcj!!.size > 0) {
|
||||
if (mCurrentTaskRoutePointsGcj.size > 0) {
|
||||
mCurrentTaskRoutePointsGcj.clear()
|
||||
}
|
||||
mCurrentTaskRoutePointsGcj.addAll(
|
||||
@@ -450,7 +435,7 @@ object TaxiTaskModel {
|
||||
return OCHOperationalMessage::class.java
|
||||
}
|
||||
|
||||
override fun onMsgReceived(obj: OCHOperationalMessage) {
|
||||
override fun onMsgReceived(obj: OCHOperationalMessage?) {
|
||||
if (obj == null) {
|
||||
d(TAG, "onMsgReceived = null")
|
||||
return
|
||||
@@ -478,17 +463,18 @@ object TaxiTaskModel {
|
||||
}
|
||||
|
||||
private val localCalculateDistanceListener: IDistanceListener = object : IDistanceListener {
|
||||
override fun distanceCallback(lastSumLength: Float) {
|
||||
val lastTime = lastSumLength / TaxiUnmannedConst.TAXI_AVERAGE_SPEED * 3.6 //秒
|
||||
override fun distanceCallback(distance: Float) {
|
||||
val lastTime = distance / TaxiUnmannedConst.TAXI_AVERAGE_SPEED * 3.6 //秒
|
||||
d(
|
||||
TAG,
|
||||
"dynamicCalculateRouteInfo: lastSumLength=$lastSumLength, lastTime=$lastTime, threadName=Thread.currentThread().name"
|
||||
"dynamicCalculateRouteInfo: lastSumLength=$distance, lastTime=$lastTime, threadName=Thread.currentThread().name"
|
||||
)
|
||||
mTaxiTaskWithOrderCallbackMap.forEach {
|
||||
val listener = it.value
|
||||
listener.onTaskTripInfoLocalCalculateChanged(
|
||||
lastSumLength.toLong(),
|
||||
lastTime.toLong())
|
||||
distance.toLong(),
|
||||
lastTime.toLong()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -520,7 +506,7 @@ object TaxiTaskModel {
|
||||
)
|
||||
routeArrivingTemp.add(temp)
|
||||
}
|
||||
mAutopilotPlanningCallback!!.routeResult(
|
||||
mAutopilotPlanningCallback?.routeResult(
|
||||
routeArriviedTemp,
|
||||
routeArrivingTemp,
|
||||
location
|
||||
@@ -569,7 +555,7 @@ object TaxiTaskModel {
|
||||
siteId: Long, isArriveAtEndSite: Boolean,
|
||||
isArrivedNearestStation: Boolean = false
|
||||
) {
|
||||
if (mIsArrivedSiteTag){
|
||||
if (mIsArrivedSiteTag) {
|
||||
DebugView.printInfoMsg("arriveSite接口正在调用中")
|
||||
i(TAG, message = "arriveSite接口正在调用中 mIsArrivedSite = $mIsArrivedSiteTag")
|
||||
return
|
||||
@@ -678,7 +664,7 @@ object TaxiTaskModel {
|
||||
)
|
||||
return
|
||||
}
|
||||
val result: QueryCurrentTaskRespBean.Result = data.data!!
|
||||
val result: QueryCurrentTaskRespBean.Result? = data.data
|
||||
d(
|
||||
TAG,
|
||||
"queryCurrentTaskOnce onSuccess:result=${GsonUtil.jsonFromObject(result)}"
|
||||
@@ -705,15 +691,13 @@ object TaxiTaskModel {
|
||||
}
|
||||
|
||||
//订单或者伪任务更新, 都去刷新下界面
|
||||
if (mCurrentTaskWithOrder == null
|
||||
|| !mCurrentTaskWithOrder!!.equals(result)
|
||||
) {
|
||||
if (mCurrentTaskWithOrder == null || mCurrentTaskWithOrder!! != result) {
|
||||
d(TAG, "queryCurrentTaskOnce: 更新本地数据")
|
||||
|
||||
mCurrentTaskWithOrder = result
|
||||
|
||||
// 任务为空
|
||||
if (result.endSite == null && result.order == null) {
|
||||
if (result?.endSite == null && result?.order == null) {
|
||||
d(TAG, "queryCurrentTaskOnce: 任务为空")
|
||||
if (mDriveToNearestStationTask == null) {
|
||||
mTaxiTaskWithOrderCallbackMap.forEach {
|
||||
@@ -728,7 +712,7 @@ object TaxiTaskModel {
|
||||
//8.29更新: 当前任务完成且订单状态为乘客已上车, 则立马去拉取任务 不再等120s,否则送驾任务要等120s后才能去执行
|
||||
// 主要是解决A-B演练任务同时接到A-B订单状态流转的问题
|
||||
//注意: 需要去除到达乘客上车点的节点, 这个节点不拉取任务
|
||||
if (result?.currentStatus == TaskStatusEnum.CompleteTask.code
|
||||
if (result.currentStatus == TaskStatusEnum.CompleteTask.code
|
||||
) {
|
||||
mADASStatusCallback?.updateAutopilotStatus()
|
||||
mTaxiTaskWithOrderCallbackMap.forEach {
|
||||
@@ -749,7 +733,7 @@ object TaxiTaskModel {
|
||||
}
|
||||
|
||||
//根据lineId集合去查轨迹集合, 返回的只是接驾任务的line集合, 没有送驾任务
|
||||
var linesIds = arrayListOf<Long>()
|
||||
val linesIds = arrayListOf<Long>()
|
||||
linesIds.add(result.lineId) // 当前任务的
|
||||
result.order?.also {
|
||||
linesIds.addAll(it.planningLines) // 接驾
|
||||
@@ -886,7 +870,7 @@ object TaxiTaskModel {
|
||||
object : OchCommonServiceCallback<BaseData> {
|
||||
override fun onSuccess(data: BaseData?) {
|
||||
DebugView.printInfoMsg("[开始任务] 请求success,lindId=$lineId")
|
||||
if (isStartAutopilot){
|
||||
if (isStartAutopilot) {
|
||||
startAutoPilot() //自驾开启
|
||||
}
|
||||
d(TAG, "startTask onSuccess: data=${GsonUtil.jsonFromObject(data)}")
|
||||
@@ -911,7 +895,7 @@ object TaxiTaskModel {
|
||||
})
|
||||
}
|
||||
|
||||
fun prepareNextTask(delayTime: Long,siteId: Long) {
|
||||
fun prepareNextTask(delayTime: Long, siteId: Long) {
|
||||
DebugView.printInfoMsg("[PrepareNextTask] 准备发送请求, siteId=$siteId")
|
||||
TaxiTaskWithOrderServiceManager.prepareTask(
|
||||
mContext,
|
||||
@@ -930,7 +914,7 @@ object TaxiTaskModel {
|
||||
DebugView.printErrorMsg("[PrepareNextTask] 请求fail, code=$code ,msg=$msg")
|
||||
d(TAG, "prepareNextTask onFail: code=$code ,msg=$msg")
|
||||
if (LoginStatusManager.isLogin() && TaxiCarServingStatusManager.isCarServingStatus()) {
|
||||
startPrepareTaskDelay(delayTime,siteId)
|
||||
startPrepareTaskDelay(delayTime, siteId)
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -940,12 +924,12 @@ object TaxiTaskModel {
|
||||
removePrepareTaskDelay()
|
||||
|
||||
mPrepareTaskDelayRunnable = Runnable {
|
||||
prepareNextTask(delayTime,siteId)
|
||||
prepareNextTask(delayTime, siteId)
|
||||
}
|
||||
|
||||
mTaxiTaskWithOrderCallbackMap.forEach {
|
||||
val listener = it.value
|
||||
listener.onStartPrepareTaskUI(delayTime,true)
|
||||
listener.onStartPrepareTaskUI(delayTime, true)
|
||||
}
|
||||
DebugView.printInfoMsg("[PrepareNextTask] 倒计时${delayTime / 1000}秒后prepareNextTask, siteId=$siteId")
|
||||
UiThreadHandler.postDelayed(
|
||||
@@ -960,7 +944,7 @@ object TaxiTaskModel {
|
||||
UiThreadHandler.removeCallbacks(mPrepareTaskDelayRunnable)
|
||||
mTaxiTaskWithOrderCallbackMap.forEach {
|
||||
val listener = it.value
|
||||
listener.onStartPrepareTaskUI(0,false)
|
||||
listener.onStartPrepareTaskUI(0, false)
|
||||
}
|
||||
mPrepareTaskDelayRunnable = null
|
||||
}
|
||||
@@ -970,7 +954,13 @@ object TaxiTaskModel {
|
||||
* 查询当前任务的轨迹
|
||||
*/
|
||||
fun queryTaskTrajectoryByLineIds(planningLineIds: Array<Long>, currentTaskLineId: Long) {
|
||||
DebugView.printInfoMsg("[查询轨迹信息] 准备发送请求,currentTaskLineId=$currentTaskLineId, planningLineIds=${GsonUtil.jsonFromObject(planningLineIds)}")
|
||||
DebugView.printInfoMsg(
|
||||
"[查询轨迹信息] 准备发送请求,currentTaskLineId=$currentTaskLineId, planningLineIds=${
|
||||
GsonUtil.jsonFromObject(
|
||||
planningLineIds
|
||||
)
|
||||
}"
|
||||
)
|
||||
TaxiTaskWithOrderServiceManager.queryTrajectoryByLindIds(
|
||||
mContext,
|
||||
planningLineIds,
|
||||
@@ -980,7 +970,13 @@ object TaxiTaskModel {
|
||||
TAG,
|
||||
"queryTaskTrajectoryByLineIds onSuccess: ${GsonUtil.jsonFromObject(data?.data)}"
|
||||
)
|
||||
DebugView.printInfoMsg("[查询轨迹信息] 请求success, currentTaskLineId=$currentTaskLineId, planningLineIds=${GsonUtil.jsonFromObject(planningLineIds)}")
|
||||
DebugView.printInfoMsg(
|
||||
"[查询轨迹信息] 请求success, currentTaskLineId=$currentTaskLineId, planningLineIds=${
|
||||
GsonUtil.jsonFromObject(
|
||||
planningLineIds
|
||||
)
|
||||
}"
|
||||
)
|
||||
data?.data?.also {
|
||||
mTaskTrajectoryList.addAll(it)
|
||||
mCurrentTaskTrajectory = it.first { currentTaskLineId == it.lineId }
|
||||
@@ -1033,8 +1029,8 @@ object TaxiTaskModel {
|
||||
//暂停接单状态下,去接单
|
||||
DebugView.printInfoMsg("[开始接单] 准备发送请求")
|
||||
TaxiTaskWithOrderServiceManager.startService(mContext,
|
||||
CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().latitude,
|
||||
CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().longitude,
|
||||
getChassisLocationGCJ02().latitude,
|
||||
getChassisLocationGCJ02().longitude,
|
||||
object : OchCommonServiceCallback<StartServiceRespBean> {
|
||||
override fun onSuccess(data: StartServiceRespBean?) {
|
||||
if (data == null) return
|
||||
@@ -1079,13 +1075,13 @@ object TaxiTaskModel {
|
||||
paramIndexes = [-1]
|
||||
)
|
||||
|
||||
fun startAutopilotByClick(){
|
||||
fun startAutopilotByClick() {
|
||||
//订单状态流转成功, 点击了开启自驾按钮, 启动自驾
|
||||
if (QueryCurrentTaskRespBean.isStartTaskType(mCurrentTaskWithOrder)) {
|
||||
startAutoPilot()
|
||||
}else if (QueryCurrentTaskRespBean.isGetTaskType(mCurrentTaskWithOrder)){
|
||||
} else if (QueryCurrentTaskRespBean.isGetTaskType(mCurrentTaskWithOrder)) {
|
||||
startTask(mCurrentTaskWithOrder!!.lineId, true)
|
||||
}else{
|
||||
} else {
|
||||
e(TAG, "task currentStatus is not StartTask.")
|
||||
DebugView.printInfoMsg("[启自驾] task currentStatus is not StartTask")
|
||||
}
|
||||
@@ -1168,9 +1164,7 @@ object TaxiTaskModel {
|
||||
mCurrentTaskWithOrder!!.lineId,
|
||||
if (mCurrentTaskWithOrder!!.order != null) mCurrentTaskWithOrder!!.order!!.orderNo else ""
|
||||
)
|
||||
if (mControllerStatusCallback != null) {
|
||||
mControllerStatusCallback!!.startOpenAutopilot()
|
||||
}
|
||||
mControllerStatusCallback?.startOpenAutopilot()
|
||||
}
|
||||
|
||||
private fun initAutopilotControlParameters(): AutopilotControlParameters? {
|
||||
@@ -1306,16 +1300,12 @@ object TaxiTaskModel {
|
||||
curTaskAndOrder.endSite!!.gcjLat,
|
||||
curTaskAndOrder.endSite!!.gcjLon
|
||||
)
|
||||
if (mAutopilotPlanningCallback != null) {
|
||||
mAutopilotPlanningCallback!!.setLineMarker(startStation, endStation)
|
||||
}
|
||||
mAutopilotPlanningCallback?.setLineMarker(startStation, endStation)
|
||||
}
|
||||
}
|
||||
|
||||
private fun cleanLineMarker() {
|
||||
if (mAutopilotPlanningCallback != null) {
|
||||
mAutopilotPlanningCallback!!.setLineMarker(null, null)
|
||||
}
|
||||
mAutopilotPlanningCallback?.setLineMarker(null, null)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1339,7 +1329,7 @@ object TaxiTaskModel {
|
||||
|
||||
// 登出
|
||||
fun logout() {
|
||||
loginService!!.loginOut(
|
||||
loginService?.loginOut(
|
||||
getChassisLocationGCJ02().latitude,
|
||||
getChassisLocationGCJ02().longitude
|
||||
)
|
||||
@@ -1350,18 +1340,15 @@ object TaxiTaskModel {
|
||||
|
||||
//导航去订单终点目的地
|
||||
fun startNaviToEndStation(isShow: Boolean) {
|
||||
if (mCurrentTaskRoutePointsGcj == null) return
|
||||
if (mCurrentTaskRoutePointsGcj.size > 0) { //使用自驾轨迹
|
||||
if (mOrderStatusCallback != null) {
|
||||
mOrderStatusCallback!!.onNaviToEnd(false, isShow)
|
||||
}
|
||||
mOrderStatusCallback?.onNaviToEnd(false, isShow)
|
||||
} else { //若直接要显示导航地图则直接导航, 若不是则2s后若无轨迹数据使用高德导航
|
||||
if (isShow && mOrderStatusCallback != null) {
|
||||
mOrderStatusCallback!!.onNaviToEnd(true, true)
|
||||
if (isShow) {
|
||||
mOrderStatusCallback?.onNaviToEnd(true, true)
|
||||
} else {
|
||||
UiThreadHandler.postDelayed({
|
||||
if (mCurrentTaskRoutePointsGcj.size == 0 && mOrderStatusCallback != null) {
|
||||
mOrderStatusCallback!!.onNaviToEnd(true, false)
|
||||
if (mCurrentTaskRoutePointsGcj.size == 0) {
|
||||
mOrderStatusCallback?.onNaviToEnd(true, false)
|
||||
}
|
||||
}, 2000L)
|
||||
}
|
||||
@@ -1453,7 +1440,7 @@ object TaxiTaskModel {
|
||||
d(
|
||||
TAG, "stopAutoStartAutopilot = ${mCurrentTaskWithOrder?.currentStatus}"
|
||||
)
|
||||
if (QueryCurrentTaskRespBean.isGetTaskType(mCurrentTaskWithOrder)){
|
||||
if (QueryCurrentTaskRespBean.isGetTaskType(mCurrentTaskWithOrder)) {
|
||||
mControllerStatusCallback?.stopOpenAutopilotNonManual()
|
||||
mTaxiTaskWithOrderCallbackMap.forEach {
|
||||
val listener = it.value
|
||||
@@ -1462,14 +1449,14 @@ object TaxiTaskModel {
|
||||
}
|
||||
}
|
||||
|
||||
fun pauseStartAutopilot(){
|
||||
fun pauseStartAutopilot() {
|
||||
mTaxiTaskWithOrderCallbackMap.forEach {
|
||||
val listener = it.value
|
||||
listener.onPauseStartAutopilot()
|
||||
}
|
||||
}
|
||||
|
||||
fun resumeStartAutopilot(remainingTime: Long){
|
||||
fun resumeStartAutopilot(remainingTime: Long) {
|
||||
mTaxiTaskWithOrderCallbackMap.forEach {
|
||||
val listener = it.value
|
||||
listener.onStartAutopilot(remainingTime)
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.mogo.eagle.core.data.biz.trafficlight.isInRange
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager
|
||||
import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_V2X
|
||||
@@ -20,7 +21,8 @@ import com.mogo.eagle.function.biz.v2x.trafficlight.core.TrafficLightThreadHandl
|
||||
import com.mogo.eagle.function.biz.v2x.trafficlight.core.TrafficLightThreadHandler.Companion.MSG_WHAT_STOP_SEARCH_TRAFFIC_LIGHT
|
||||
import com.mogo.eagle.function.biz.v2x.trafficlight.network.TrafficLightNetWorkModel
|
||||
|
||||
class MogoTrafficLightManager : IMoGoChassisLocationGCJ02Listener {
|
||||
class MogoTrafficLightManager : IMoGoChassisLocationGCJ02Listener,
|
||||
CallerMapRoadListenerManager.OnRoadListener {
|
||||
|
||||
companion object {
|
||||
|
||||
@@ -40,6 +42,8 @@ class MogoTrafficLightManager : IMoGoChassisLocationGCJ02Listener {
|
||||
@Volatile
|
||||
private var trafficLightResult: TrafficLightResult? = null
|
||||
|
||||
@Volatile
|
||||
private var mCross: Boolean = false
|
||||
private var inRange: Boolean = false
|
||||
@Volatile
|
||||
private var firstLoopCrossRoad: Boolean = true //开启循环请求路口
|
||||
@@ -49,6 +53,7 @@ class MogoTrafficLightManager : IMoGoChassisLocationGCJ02Listener {
|
||||
fun initServer(context: Context) {
|
||||
mContext = context
|
||||
CallerChassisLocationGCJ02ListenerManager.addListener(TAG, this)
|
||||
CallerMapRoadListenerManager.registerRoadListener(TAG, this)
|
||||
mThreadHandler =
|
||||
TrafficLightThreadHandler(Looper.getMainLooper(), {
|
||||
//第一次查询路口时,如果红绿灯显示,则隐藏掉
|
||||
@@ -118,6 +123,11 @@ class MogoTrafficLightManager : IMoGoChassisLocationGCJ02Listener {
|
||||
mThreadHandler?.sendEmptyMessageDelayed(MSG_WHAT_LOOP_SEARCH_CROSS_ROAD, 5_000L)
|
||||
}
|
||||
|
||||
override fun onRoadChange(cross: Boolean) {
|
||||
super.onRoadChange(cross)
|
||||
mCross = cross
|
||||
}
|
||||
|
||||
private fun checkOutOfRange() {
|
||||
mLocation?.let { loc ->
|
||||
roadIDResult?.let {
|
||||
@@ -128,7 +138,7 @@ class MogoTrafficLightManager : IMoGoChassisLocationGCJ02Listener {
|
||||
CallerTrafficLightListenerManager.invokeEnterCrossRoad(true)
|
||||
return
|
||||
}
|
||||
if (inRange) {
|
||||
if (inRange || !mCross) {
|
||||
// CallerLogger.d(M_V2X + TAG, "离开路口")
|
||||
CallerTrafficLightListenerManager.invokeEnterCrossRoad(false)
|
||||
inRange = false
|
||||
|
||||
@@ -5,8 +5,6 @@ import com.mogo.commons.utils.MogoAnalyticUtils
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo
|
||||
import com.mogo.eagle.core.data.enums.CommunicationType
|
||||
import com.mogo.eagle.core.data.enums.DataSourceType
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener
|
||||
import com.mogo.eagle.core.function.api.biz.IFuncBizProvider
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
|
||||
import com.mogo.eagle.core.function.call.biz.CallerFuncBizListenerManager
|
||||
@@ -17,7 +15,7 @@ import java.util.concurrent.atomic.AtomicBoolean
|
||||
/**
|
||||
* V2X消息播报埋点统计
|
||||
*/
|
||||
object V2XEventAnalyticsManager: IMoGoChassisLocationWGS84Listener,IFuncBizProvider{
|
||||
object V2XEventAnalyticsManager: IFuncBizProvider{
|
||||
|
||||
private const val TAG = "V2XEventAnalyticsManager"
|
||||
private val hasInit by lazy { AtomicBoolean(false) }
|
||||
@@ -38,10 +36,6 @@ object V2XEventAnalyticsManager: IMoGoChassisLocationWGS84Listener,IFuncBizProvi
|
||||
private const val EVENT_PARAMS_LATITUDE ="latitude" // 纬度
|
||||
private const val EVENT_PARAMS_HEADING ="heading" // 航向角
|
||||
|
||||
private var longitude: Double?=null //经度
|
||||
private var latitude: Double?=null //纬度
|
||||
private var heading: Double?=null //航向角
|
||||
|
||||
private var oldTime = System.currentTimeMillis()
|
||||
|
||||
fun init(){
|
||||
@@ -52,13 +46,11 @@ object V2XEventAnalyticsManager: IMoGoChassisLocationWGS84Listener,IFuncBizProvi
|
||||
|
||||
private fun registerListener(){
|
||||
// 添加 ADAS车辆状态&定位 监听
|
||||
CallerChassisLocationWGS84ListenerManager.addListener(TAG, this)
|
||||
CallerFuncBizListenerManager.addListener(TAG,this)
|
||||
}
|
||||
|
||||
private fun unRegisterListener(){
|
||||
// 移除 ADAS车辆状态&定位 监听
|
||||
CallerChassisLocationWGS84ListenerManager.removeListener(TAG)
|
||||
CallerFuncBizListenerManager.removeListener(TAG)
|
||||
}
|
||||
|
||||
@@ -87,9 +79,9 @@ object V2XEventAnalyticsManager: IMoGoChassisLocationWGS84Listener,IFuncBizProvi
|
||||
msgEventParams[EVENT_PARAMS_PLATE_NUMBER] = AppConfigInfo.plateNumber //车牌号
|
||||
msgEventParams[EVENT_PARAMS_CAR_SN] = MoGoAiCloudClientConfig.getInstance().sn //鹰眼SN
|
||||
msgEventParams[EVENT_PARAMS_EYE_VERSION] = AppUtils.getAppVersionName() //鹰眼版本
|
||||
msgEventParams[EVENT_PARAMS_LONGITUDE] = "$longitude" //经度
|
||||
msgEventParams[EVENT_PARAMS_LATITUDE] = "$latitude" //纬度
|
||||
msgEventParams[EVENT_PARAMS_HEADING] = "$heading" //航向角
|
||||
msgEventParams[EVENT_PARAMS_LONGITUDE] = "${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().longitude}" //经度
|
||||
msgEventParams[EVENT_PARAMS_LATITUDE] = "${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().latitude}" //纬度
|
||||
msgEventParams[EVENT_PARAMS_HEADING] = "${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().heading}" //航向角
|
||||
MogoAnalyticUtils.track(EVENT_KEY_RECEIVE_V2X_MSG,msgEventParams)
|
||||
}
|
||||
|
||||
@@ -109,20 +101,12 @@ object V2XEventAnalyticsManager: IMoGoChassisLocationWGS84Listener,IFuncBizProvi
|
||||
msgEventParams[EVENT_PARAMS_PLATE_NUMBER] = AppConfigInfo.plateNumber //车牌号
|
||||
msgEventParams[EVENT_PARAMS_CAR_SN] = MoGoAiCloudClientConfig.getInstance().sn //鹰眼SN
|
||||
msgEventParams[EVENT_PARAMS_EYE_VERSION] = AppUtils.getAppVersionName() //鹰眼版本
|
||||
msgEventParams[EVENT_PARAMS_LONGITUDE] = "$longitude" //经度
|
||||
msgEventParams[EVENT_PARAMS_LATITUDE] = "$latitude" //纬度
|
||||
msgEventParams[EVENT_PARAMS_HEADING] = "$heading" //航向角
|
||||
msgEventParams[EVENT_PARAMS_LONGITUDE] = "${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().longitude}" //经度
|
||||
msgEventParams[EVENT_PARAMS_LATITUDE] = "${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().latitude}" //纬度
|
||||
msgEventParams[EVENT_PARAMS_HEADING] = "${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().heading}" //航向角
|
||||
MogoAnalyticUtils.track(EVENT_KEY_V2X_MSG_EVENT,msgEventParams)
|
||||
}
|
||||
|
||||
override fun onChassisLocationWGS84(gnssInfo: MogoLocation) {
|
||||
gnssInfo.let {
|
||||
longitude = it.longitude
|
||||
latitude = it.latitude
|
||||
heading = it.heading
|
||||
}
|
||||
}
|
||||
|
||||
fun onDestroy(){
|
||||
if (hasInit.compareAndSet(true, false)){
|
||||
unRegisterListener()
|
||||
|
||||
@@ -17,12 +17,10 @@ import com.mogo.eagle.core.data.deva.badcase.BagDescriptionEntity
|
||||
import com.mogo.eagle.core.data.deva.badcase.BagInfoEntity
|
||||
import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity
|
||||
import com.mogo.eagle.core.data.deva.badcase.RecordCaseEntity
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
|
||||
import com.mogo.eagle.core.utilcode.mogo.toast.TipToast
|
||||
@@ -37,12 +35,10 @@ import com.zhidao.loglib.upload.UploadManager
|
||||
import com.zhidao.loglib.util.FileUtil
|
||||
import com.zhjt.mogo_core_function_devatools.R
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.BadCaseAnalyticsManager
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.BadCaseManager
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.record.RecordManager
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import mogo.telematics.pad.MessagePad
|
||||
import record_cache.RecordPanelOuterClass
|
||||
import java.io.File
|
||||
import java.lang.StringBuilder
|
||||
@@ -55,7 +51,7 @@ import java.util.*
|
||||
* @since: 2022/7/13
|
||||
*/
|
||||
class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchListener,
|
||||
IMoGoAutopilotRecordListener, IMoGoChassisLocationWGS84Listener {
|
||||
IMoGoAutopilotRecordListener {
|
||||
|
||||
companion object {
|
||||
const val TAG = "InitiativeBadCaseWindow"
|
||||
@@ -94,8 +90,6 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
private var recordFileName: String?=null //录制文件包名
|
||||
private var receiveTime: String?= null
|
||||
private var uploadStamp: String = System.currentTimeMillis().toString()
|
||||
private var longitude: Double?=null
|
||||
private var latitude: Double?=null
|
||||
|
||||
private var bagManagerEntity: BagManagerEntity = BagManagerEntity()
|
||||
|
||||
@@ -109,7 +103,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
private var clickListener: ClickListener? = null
|
||||
|
||||
init {
|
||||
initFloatWindow();
|
||||
initFloatWindow()
|
||||
}
|
||||
|
||||
private val presenter by lazy {
|
||||
@@ -147,8 +141,6 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
|
||||
//采集结果回调监听
|
||||
CallerAutopilotRecordListenerManager.addListener(this.hashCode().toString(),this)
|
||||
// 添加 ADAS车辆状态&定位 监听
|
||||
CallerChassisLocationWGS84ListenerManager.addListener(this.hashCode().toString(), this)
|
||||
viewAudioButton.setOnClickListener {
|
||||
audioStatus = !audioStatus
|
||||
setAudio(audioStatus)
|
||||
@@ -309,14 +301,14 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
itx["audioUrl"] = downloadUrl?:"" //音频COS地址
|
||||
itx["mapVersion"] = BadCaseConfig.dockerVersion ?:"" //工控机版本
|
||||
itx["eyeVersion"] = AppUtils.getAppVersionName() //鹰眼版本
|
||||
itx["coordinate"] = "latitude:${latitude};longitude:${longitude}" //坐标
|
||||
itx["coordinate"] = "latitude:${getChassisLocationWGS84().latitude};longitude:${getChassisLocationWGS84().longitude}" //坐标
|
||||
})
|
||||
if (uploadResult == null || uploadResult.code != 200) {
|
||||
TipToast.shortTip("上报失败")
|
||||
} else {
|
||||
TipToast.shortTip("上报成功")
|
||||
//将上报BI的结果同步给工控机记录保存
|
||||
recordKey?.let {
|
||||
recordKey.let {
|
||||
val hasAudio = downloadUrl != null
|
||||
val descReqEntity = BagDescriptionEntity(uploadReason.toString(),hasAudio,downloadUrl.toString(),true)
|
||||
bagManagerEntity.reqType = 5
|
||||
@@ -324,15 +316,16 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
bagManagerEntity.descReq = descReqEntity
|
||||
CallerAutoPilotControlManager.sendBagManagerCmd(bagManagerEntity)
|
||||
}
|
||||
val loc = getChassisLocationWGS84()
|
||||
BadCaseAnalyticsManager.bagRecordUpload(recordKey.toString(),recordFileName?:"",uploadStamp,
|
||||
"100",AppConfigInfo.plateNumber,BadCaseConfig.totalDuration.toString(),MoGoAiCloudClientConfig.getInstance().sn,
|
||||
BadCaseConfig.dockerVersion ?:"",AppUtils.getAppVersionName(),latitude.toString(),longitude.toString(),
|
||||
BadCaseConfig.dockerVersion ?:"",AppUtils.getAppVersionName(),loc.latitude.toString(),loc.longitude.toString(),
|
||||
BadCaseConfig.identity,downloadUrl?:"",uploadReason.toString(),System.currentTimeMillis().toString(),"1")
|
||||
//日志
|
||||
CallerLogger.i("$M_DEVA$TAG", "BadCase Initiative Analytics="+"key="+recordKey+" filename="+recordFileName+
|
||||
" receiveTime="+uploadStamp+" stat="+"100"+" plateNumber="+AppConfigInfo.plateNumber+
|
||||
" totalDuration="+ BadCaseConfig.totalDuration +" carSn="+MoGoAiCloudClientConfig.getInstance().sn+" mapVersion="+BadCaseConfig.dockerVersion+
|
||||
" eyeVersion="+AppUtils.getAppVersionName()+" latitude="+ latitude +" longitude="+ longitude+
|
||||
" eyeVersion="+AppUtils.getAppVersionName()+" latitude="+ loc.latitude +" longitude="+ loc.longitude+
|
||||
" identity="+BadCaseConfig.identity + " downloadUrl="+downloadUrl +" uploadReason="+uploadReason+
|
||||
" uploadTime="+System.currentTimeMillis()+" channel="+"1")
|
||||
BadCaseConfig.windowNum--
|
||||
@@ -413,8 +406,6 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
fun hideFloatWindow() {
|
||||
//注销采集结果回调监听
|
||||
CallerAutopilotRecordListenerManager.removeListener(this.hashCode().toString())
|
||||
// 移除 ADAS车辆状态&定位 监听
|
||||
CallerChassisLocationWGS84ListenerManager.removeListener(this.hashCode().toString())
|
||||
if (mFloatLayout.parent != null) mWindowManager!!.removeView(mFloatLayout)
|
||||
}
|
||||
|
||||
@@ -440,9 +431,4 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
fun closeWindow()
|
||||
}
|
||||
|
||||
override fun onChassisLocationWGS84(gnssInfo: MogoLocation) {
|
||||
latitude = gnssInfo.latitude
|
||||
longitude = gnssInfo.longitude
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,8 +6,6 @@ import android.graphics.Color
|
||||
import android.graphics.PixelFormat
|
||||
import android.os.CountDownTimer
|
||||
import android.os.Handler
|
||||
import android.os.Parcel
|
||||
import android.os.Parcelable
|
||||
import android.util.DisplayMetrics
|
||||
import android.view.*
|
||||
import android.widget.CheckBox
|
||||
@@ -19,10 +17,8 @@ import com.mogo.cloud.passport.MoGoAiCloudClientConfig
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo
|
||||
import com.mogo.eagle.core.data.deva.badcase.BagDescriptionEntity
|
||||
import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.msgbox.RecordBagMsg
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
|
||||
@@ -38,7 +34,6 @@ import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.record.RecordManager
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import mogo.telematics.pad.MessagePad
|
||||
import com.zhidao.loglib.upload.UploadManager
|
||||
import com.zhidao.loglib.util.FileUtil
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.BadCaseAnalyticsManager
|
||||
@@ -52,7 +47,7 @@ import java.io.File
|
||||
* @since: 2022/7/17
|
||||
*/
|
||||
class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListener,
|
||||
IMoGoChassisLocationWGS84Listener, CompoundButton.OnCheckedChangeListener {
|
||||
CompoundButton.OnCheckedChangeListener {
|
||||
|
||||
companion object {
|
||||
const val TAG = "PassiveBadCaseWindow"
|
||||
@@ -74,8 +69,6 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
private var receiveTime: String ?= null //接收时间
|
||||
private var stat: String = ""
|
||||
private var boxBean: MsgBoxBean ?= null
|
||||
private var longitude: Double = 0.0
|
||||
private var latitude: Double = 0.0
|
||||
|
||||
private var mInViewX = 0f
|
||||
private var mInViewY = 0f
|
||||
@@ -100,7 +93,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
private lateinit var flReasonLayout: FlexboxLayout
|
||||
|
||||
init {
|
||||
initFloatWindow();
|
||||
initFloatWindow()
|
||||
}
|
||||
|
||||
private val presenter by lazy {
|
||||
@@ -126,8 +119,6 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
BadCaseConfig.windowNum++
|
||||
tvPassiveTime.text = "时间:${millis2String(System.currentTimeMillis(),TimeUtils.getHourMinSecondFormat())}"
|
||||
tvPassiveIdentity.text = "身份:${BadCaseConfig.identity}"
|
||||
// 添加 ADAS车辆状态&定位 监听
|
||||
CallerChassisLocationWGS84ListenerManager.addListener(TAG, this)
|
||||
viewAudioButton.setOnClickListener {
|
||||
audioStatus = !audioStatus
|
||||
setAudio(audioStatus)
|
||||
@@ -271,7 +262,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
itx["audioUrl"] = downloadUrl?:"" //音频COS地址
|
||||
itx["mapVersion"] = BadCaseConfig.dockerVersion ?:"" //工控机版本
|
||||
itx["eyeVersion"] = AppUtils.getAppVersionName() //鹰眼版本
|
||||
itx["coordinate"] = "latitude:${latitude};longitude:${longitude}" //坐标
|
||||
itx["coordinate"] = "latitude:${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().latitude};longitude:${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().longitude}" //坐标
|
||||
|
||||
})
|
||||
if (uploadResult == null || uploadResult.code != 200) {
|
||||
@@ -288,15 +279,16 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
CallerAutoPilotControlManager.sendBagManagerCmd(bagManagerEntity)
|
||||
}
|
||||
//被动上报埋点统计
|
||||
val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84()
|
||||
BadCaseAnalyticsManager.bagRecordUpload(recordKey?:"",recordFileName?:"",receiveTime?:System.currentTimeMillis().toString(),
|
||||
stat,AppConfigInfo.plateNumber,BadCaseConfig.totalDuration.toString(),MoGoAiCloudClientConfig.getInstance().sn,
|
||||
BadCaseConfig.dockerVersion ?:"",AppUtils.getAppVersionName(),latitude.toString(),longitude.toString(),
|
||||
BadCaseConfig.dockerVersion ?:"",AppUtils.getAppVersionName(),loc.latitude.toString(),loc.longitude.toString(),
|
||||
BadCaseConfig.identity,downloadUrl?:"",uploadReason,System.currentTimeMillis().toString(),"0")
|
||||
//日志
|
||||
CallerLogger.i("$M_DEVA$TAG", "BadCase Passive Analytics="+"key="+recordKey+" filename="+recordFileName+
|
||||
" receiveTime="+receiveTime+" stat="+"100"+" plateNumber="+AppConfigInfo.plateNumber+
|
||||
" totalDuration="+ BadCaseConfig.totalDuration +" carSn="+MoGoAiCloudClientConfig.getInstance().sn+" mapVersion="+BadCaseConfig.dockerVersion+
|
||||
" eyeVersion="+AppUtils.getAppVersionName()+" latitude="+ latitude +" longitude="+ longitude+
|
||||
" eyeVersion="+AppUtils.getAppVersionName()+" latitude="+ loc.latitude +" longitude="+ loc.longitude+
|
||||
" identity="+BadCaseConfig.identity + " downloadUrl="+downloadUrl +" uploadReason="+uploadReason+
|
||||
" uploadTime="+System.currentTimeMillis()+" channel="+"0")
|
||||
BadCaseConfig.windowNum--
|
||||
@@ -390,7 +382,6 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
|
||||
fun hideFloatWindow() {
|
||||
// 移除 ADAS车辆状态&定位 监听
|
||||
CallerChassisLocationWGS84ListenerManager.removeListener(TAG)
|
||||
if (mFloatLayout.parent != null) mWindowManager!!.removeView(mFloatLayout)
|
||||
}
|
||||
|
||||
@@ -411,9 +402,4 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
fun closeWindow()
|
||||
}
|
||||
|
||||
override fun onChassisLocationWGS84(gnssInfo: MogoLocation) {
|
||||
latitude = gnssInfo.latitude
|
||||
longitude = gnssInfo.longitude
|
||||
}
|
||||
|
||||
}
|
||||
@@ -46,28 +46,26 @@ class SteeringBrakeView(context: Context, attrs: AttributeSet?) : ConstraintLayo
|
||||
}
|
||||
|
||||
override fun onChassisLocationWGS84(gnssInfo: MogoLocation) {
|
||||
if (gnssInfo != null) {
|
||||
//设置刹车信息,小于默认认为是刹车 //todo 优化sp获取,不要每次回调都去调用sp
|
||||
brakeLight =
|
||||
if (gnssInfo.acceleration < SharedPrefsMgr.getInstance(Utils.getApp()).getFloat(
|
||||
MoGoConfig.BRAKE_ACCELERATION_THRESHOLD, -2.5f
|
||||
)
|
||||
) {
|
||||
1
|
||||
} else {
|
||||
0
|
||||
}
|
||||
CallerLogger.d(
|
||||
"$M_HMI$TAG",
|
||||
"---onAutopilotLightSwitchData ---Acceleration = " + gnssInfo.acceleration + "-- brakeLight = " + brakeLight
|
||||
)
|
||||
ThreadUtils.runOnUiThread {
|
||||
if (!isShowTurnLight) { //在不展示转向灯的情况下,展示车辆刹车的动效
|
||||
brakeView.visibility = View.VISIBLE
|
||||
brakeView.setBrakeLight(brakeLight)
|
||||
} else {
|
||||
brakeView.visibility = View.GONE
|
||||
}
|
||||
//设置刹车信息,小于默认认为是刹车 //todo 优化sp获取,不要每次回调都去调用sp
|
||||
brakeLight =
|
||||
if (gnssInfo.acceleration < SharedPrefsMgr.getInstance(Utils.getApp()).getFloat(
|
||||
MoGoConfig.BRAKE_ACCELERATION_THRESHOLD, -2.5f
|
||||
)
|
||||
) {
|
||||
1
|
||||
} else {
|
||||
0
|
||||
}
|
||||
CallerLogger.d(
|
||||
"$M_HMI$TAG",
|
||||
"---onAutopilotLightSwitchData ---Acceleration = " + gnssInfo.acceleration + "-- brakeLight = " + brakeLight
|
||||
)
|
||||
ThreadUtils.runOnUiThread {
|
||||
if (!isShowTurnLight) { //在不展示转向灯的情况下,展示车辆刹车的动效
|
||||
brakeView.visibility = View.VISIBLE
|
||||
brakeView.setBrakeLight(brakeLight)
|
||||
} else {
|
||||
brakeView.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,13 +9,11 @@ import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo
|
||||
import com.mogo.eagle.core.data.deva.bindingcar.AdUpgradeStateHelper
|
||||
import com.mogo.eagle.core.data.deva.bindingcar.IPCUpgradeStateInfo
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener
|
||||
import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener
|
||||
import com.mogo.eagle.core.function.api.hmi.autopilot.IMoGoCheckAutoPilotBtnListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiListenerManager
|
||||
@@ -42,7 +40,7 @@ class SystemVersionView @JvmOverloads constructor(
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener,
|
||||
IMoGoDevaToolsListener, IMoGoCheckAutoPilotBtnListener, IMoGoChassisLocationWGS84Listener {
|
||||
IMoGoDevaToolsListener, IMoGoCheckAutoPilotBtnListener {
|
||||
|
||||
companion object {
|
||||
const val TAG = "SystemVersionView"
|
||||
@@ -57,7 +55,6 @@ class SystemVersionView @JvmOverloads constructor(
|
||||
private var currentProgress: Int = -1 //当前已下载包体大小
|
||||
|
||||
private var isHDCached = false
|
||||
private var location: MogoLocation? = null
|
||||
|
||||
init {
|
||||
LayoutInflater.from(context).inflate(R.layout.view_system_version, this, true)
|
||||
@@ -141,17 +138,17 @@ class SystemVersionView @JvmOverloads constructor(
|
||||
ivHDCache.setOnClickListener {
|
||||
hmiAction(
|
||||
"$M_HMI$TAG",
|
||||
"HD map view click , isHDCached:$isHDCached , lon:${location?.longitude} , lat:${location?.latitude}"
|
||||
"HD map view click , isHDCached:$isHDCached , lon:${getChassisLocationWGS84().longitude} , lat:${getChassisLocationWGS84().latitude}"
|
||||
)
|
||||
if (isHDCached) {// 已缓存
|
||||
ToastUtils.showShort(resources.getString(R.string.offline_had_downloaded))
|
||||
} else {// 未缓存
|
||||
if (CallerMapUIServiceManager.getCityCode().isNullOrEmpty()) {// 未拿到高德的cityCode
|
||||
if (location == null || (location!!.longitude <= 0.0 && location!!.latitude <= 0.0)) {// 未拿到高精的经纬度
|
||||
if ((getChassisLocationWGS84().longitude <= 0.0 && getChassisLocationWGS84().latitude <= 0.0)) {// 未拿到高精的经纬度
|
||||
ToastUtils.showShort(resources.getString(R.string.location_try_again))
|
||||
} else {// 拿到了高精的经纬度
|
||||
val dialog = OfflineMapDialog(context)
|
||||
dialog.location = location
|
||||
dialog.location = getChassisLocationWGS84()
|
||||
dialog.show()
|
||||
}
|
||||
} else {// 拿到高德的cityCode
|
||||
@@ -313,7 +310,6 @@ class SystemVersionView @JvmOverloads constructor(
|
||||
CallerHmiListenerManager.addListener(TAG, this)
|
||||
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
|
||||
CallerDevaToolsListenerManager.addListener(TAG, this)
|
||||
CallerChassisLocationWGS84ListenerManager.addListener(TAG, this)
|
||||
needQueryContainers = true
|
||||
}
|
||||
|
||||
@@ -325,7 +321,6 @@ class SystemVersionView @JvmOverloads constructor(
|
||||
CallerHmiListenerManager.removeListener(TAG)
|
||||
CallerAutoPilotStatusListenerManager.removeListener(TAG)
|
||||
CallerDevaToolsListenerManager.removeListener(TAG)
|
||||
CallerChassisLocationWGS84ListenerManager.removeListener(TAG)
|
||||
needQueryContainers = false
|
||||
}
|
||||
|
||||
@@ -368,10 +363,6 @@ class SystemVersionView @JvmOverloads constructor(
|
||||
adCircularProgressView?.visibility = View.GONE
|
||||
}
|
||||
|
||||
override fun onChassisLocationWGS84(gnssInfo: MogoLocation) {
|
||||
location = gnssInfo
|
||||
}
|
||||
|
||||
/**
|
||||
* 状态查询应答
|
||||
* @param status 数据
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
package com.mogo.eagle.core.function.business;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.mogo.eagle.core.data.enums.DataSourceType;
|
||||
import com.mogo.eagle.core.data.map.MogoLocation;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager;
|
||||
import com.mogo.eagle.core.function.call.v2x.CallerLimitingVelocityListenerManager;
|
||||
import com.mogo.map.MapDataWrapper;
|
||||
@@ -12,19 +10,14 @@ import com.mogo.map.MapDataWrapper;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
import kotlin.Unit;
|
||||
import kotlin.jvm.functions.Function1;
|
||||
|
||||
/**
|
||||
* 限速
|
||||
*
|
||||
* @author mogoauto
|
||||
*/
|
||||
public class SpeedLimitDataManager implements IMoGoChassisLocationWGS84Listener {
|
||||
public class SpeedLimitDataManager {
|
||||
|
||||
private final static String TAG = "SpeedLimitDataManager";
|
||||
private static volatile SpeedLimitDataManager instance;
|
||||
private volatile MogoLocation mLocation;
|
||||
|
||||
private SpeedLimitDataManager() {
|
||||
}
|
||||
@@ -40,34 +33,26 @@ public class SpeedLimitDataManager implements IMoGoChassisLocationWGS84Listener
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChassisLocationWGS84(@Nullable MogoLocation gnssInfo) {
|
||||
mLocation = gnssInfo;
|
||||
}
|
||||
|
||||
private class SpeedTimerTask extends TimerTask {
|
||||
private static class SpeedTimerTask extends TimerTask {
|
||||
@Override
|
||||
public void run() {
|
||||
if (mLocation != null) {
|
||||
getSpeedLimit();
|
||||
}
|
||||
getSpeedLimit();
|
||||
}
|
||||
|
||||
private void getSpeedLimit() {
|
||||
MapDataWrapper.INSTANCE.getLimitSpeed(mLocation.getLongitude(), mLocation.getLatitude(), (float) mLocation.getHeading(), new Function1<Integer, Unit>() {
|
||||
@Override
|
||||
public Unit invoke(Integer integer) {
|
||||
MogoLocation loc = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84();
|
||||
if (loc.getLatitude() > 0 && loc.getLongitude() > 0) {
|
||||
MapDataWrapper.INSTANCE.getLimitSpeed(loc.getLongitude(), loc.getLatitude(), (float) loc.getHeading(), integer -> {
|
||||
if (integer != null && integer > 0) {
|
||||
CallerLimitingVelocityListenerManager.INSTANCE.invokeUnion(integer, DataSourceType.MAP);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void start() {
|
||||
CallerChassisLocationWGS84ListenerManager.INSTANCE.addListener(TAG, this);
|
||||
Timer mTimer = new Timer();
|
||||
mTimer.schedule(new SpeedTimerTask(), 3000, 1000);
|
||||
}
|
||||
|
||||
@@ -75,18 +75,18 @@ public class MogoRouteOverlayManager implements
|
||||
if (gnssInfo == null) {
|
||||
return;
|
||||
}
|
||||
Log.d(TAG, "-- onChassisLocationGCJ02 -- 1 ---" + ":auto-mode:" + autopilotMode.get() + ", isArriveAtStation: " + isArriveAtStation.get());
|
||||
// Log.d(TAG, "-- onChassisLocationGCJ02 -- 1 ---" + ":auto-mode:" + autopilotMode.get() + ", isArriveAtStation: " + isArriveAtStation.get());
|
||||
if (isArriveAtStation.get() && autopilotMode.get() != 2) {
|
||||
RouteOverlayDrawer.getInstance().clearMogoRouteOverlay();
|
||||
return;
|
||||
}
|
||||
Log.d(TAG, "-- onChassisLocationGCJ02 -- 2 ---" + "auto-mode:" + autopilotMode.get() + ", isDemoMode:" + FunctionBuildConfig.isDemoMode + ", force:" + FunctionBuildConfig.isForceDrawAutopilotTrajectoryByDebugSettingView);
|
||||
// Log.d(TAG, "-- onChassisLocationGCJ02 -- 2 ---" + "auto-mode:" + autopilotMode.get() + ", isDemoMode:" + FunctionBuildConfig.isDemoMode + ", force:" + FunctionBuildConfig.isForceDrawAutopilotTrajectoryByDebugSettingView);
|
||||
boolean force = FunctionBuildConfig.isForceDrawAutopilotTrajectoryByDebugSettingView || FunctionBuildConfig.isDemoMode && FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData;
|
||||
if (!force && autopilotMode.get() != 2) {
|
||||
RouteOverlayDrawer.getInstance().clearMogoRouteOverlay();
|
||||
return;
|
||||
}
|
||||
Log.d(TAG, "-- onChassisLocationGCJ02 -- 3 ---");
|
||||
// Log.d(TAG, "-- onChassisLocationGCJ02 -- 3 ---");
|
||||
synchronized (queue) {
|
||||
if (!queue.isEmpty()) {
|
||||
List<MessagePad.TrajectoryPoint> items = queue.pollLast();
|
||||
|
||||
@@ -102,6 +102,7 @@ class ChainConstant {
|
||||
const val CHAIN_CODE_V2X_MSG = "CHAIN_CODE_V2X_MSG"
|
||||
const val CHAIN_CODE_MSG_BOX = "CHAIN_CODE_MSG_BOX"
|
||||
const val CHAIN_CODE_HD_MAP_CALL = "CHAIN_CODE_HD_MAP_CALL"
|
||||
const val CHAIN_CODE_HD_MAP_ROAD_CROSS = "CHAIN_CODE_HD_MAP_ROAD_CROSS"
|
||||
const val CHAIN_CODE_HMI_ACTIONS = "CHAIN_CODE_HMI_ACTIONS"
|
||||
|
||||
//operation by user
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
package com.mogo.eagle.core.function.call.map
|
||||
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP
|
||||
import com.zhidaoauto.map.data.road.RoadCross
|
||||
import com.zhidaoauto.map.data.road.StopLine
|
||||
import com.zhjt.service.chain.ChainLog
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
@@ -9,11 +13,11 @@ object CallerMapRoadListenerManager {
|
||||
|
||||
interface OnRoadListener {
|
||||
|
||||
fun onRoadIdInfo(roadId: String){}
|
||||
fun onRoadIdInfo(roadId: String) {}
|
||||
|
||||
fun onStopLineInfo(info: StopLine){}
|
||||
fun onStopLineInfo(info: StopLine) {}
|
||||
|
||||
fun onRoadChange(cross: Boolean){}
|
||||
fun onRoadChange(cross: Boolean) {}
|
||||
}
|
||||
|
||||
private val listeners by lazy {
|
||||
@@ -48,15 +52,21 @@ object CallerMapRoadListenerManager {
|
||||
}
|
||||
|
||||
private var mCross: Boolean by Delegates.observable(false) { _, oldValue, newValue ->
|
||||
if(oldValue != newValue){
|
||||
Logger.d("emArrow","cross : $newValue")
|
||||
if (oldValue != newValue) {
|
||||
CallerLogger.d("$M_MAP onRoadChange", newValue)
|
||||
listeners.forEach { entry ->
|
||||
entry.value.onRoadChange(newValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun invokeRoadChange(cross: Boolean) {
|
||||
@ChainLog(
|
||||
linkChainLog = ChainConstant.CHAIN_TYPE_HD_MAP,
|
||||
linkCode = ChainConstant.CHAIN_SOURCE_MAP,
|
||||
nodeAliasCode = ChainConstant.CHAIN_CODE_HD_MAP_ROAD_CROSS,
|
||||
paramIndexes = [0, 1]
|
||||
)
|
||||
fun invokeRoadChange(cross: Boolean, roadCross: RoadCross) {
|
||||
mCross = cross
|
||||
|
||||
}
|
||||
|
||||
@@ -207,18 +207,18 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
|
||||
}
|
||||
}
|
||||
|
||||
private var roadCross:RoadCross? by Delegates.observable(null){ _,oldValue,newValue ->
|
||||
private var roadCross: RoadCross? by Delegates.observable(null) { _, oldValue, newValue ->
|
||||
oldValue?.let {
|
||||
//对驶入驶出路口做二次过滤,防止多次回调
|
||||
if(it.status == 0 && newValue!!.status == 1){
|
||||
if (it.status == 0 && newValue!!.status == 1) {
|
||||
//进入路口
|
||||
i("$M_MAP$TAG","进入路口 :${newValue.cross_id}")
|
||||
invokeRoadChange(true)
|
||||
i("$M_MAP$TAG", "进入路口 :${newValue.cross_id}")
|
||||
invokeRoadChange(true, newValue)
|
||||
}
|
||||
if((it.status == 1 && newValue!!.status == 0) || (newValue!!.cross_id_end.isNotEmpty() && oldValue.cross_id_end != newValue.cross_id_end)){
|
||||
if ((it.status == 1 && newValue!!.status == 0) || (newValue!!.cross_id_end.isNotEmpty() && oldValue.cross_id_end != newValue.cross_id_end)) {
|
||||
//驶出路口
|
||||
i("$M_MAP$TAG","驶出路口 上个:${oldValue.cross_id_end} , 下个:${newValue.cross_id_end}")
|
||||
invokeRoadChange(false)
|
||||
i("$M_MAP$TAG", "驶出路口 上个:${oldValue.cross_id_end} , 下个:${newValue.cross_id_end}")
|
||||
invokeRoadChange(false, newValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -232,7 +232,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
|
||||
|
||||
override fun onStopLineInfo(stopLine: StopLine?) {
|
||||
stopLine?.let {
|
||||
if(it.road_id.isNotEmpty() && it.points.size > 0){
|
||||
if (it.road_id.isNotEmpty() && it.points.size > 0) {
|
||||
d(M_MAP + TAG, "onStopLineInfo: $it")
|
||||
invokeListenersOnStopLineGet(it)
|
||||
}
|
||||
@@ -252,7 +252,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
|
||||
}
|
||||
|
||||
override fun changeMapVisualAngle(angelMode: VisualAngleMode, mogoLatLng: MogoLatLng?) {
|
||||
if(visualLock){
|
||||
if (visualLock) {
|
||||
e(M_MAP + TAG, "视角切换已锁定")
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user