From 701136d9e4a7b788ac7829d84e34dfce75635173 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Mon, 5 Dec 2022 14:52:21 +0800 Subject: [PATCH 1/8] [2.13.0]remove unuse --- .../autopilot/adapter/MoGoAdasListenerImpl.kt | 1 - .../core/function/main/MainActivity.java | 21 ------------------- .../core/function/main/MainPresenter.java | 2 +- .../res/layout/module_main_activity_main.xml | 6 ------ ...CallerAutopilotCarConfigListenerManager.kt | 6 +++--- .../module/status/IMogoStatusManager.java | 15 ------------- .../module/status/MogoStatusManager.java | 10 --------- .../module/status/StatusDescriptor.java | 4 ---- .../com/mogo/commons/mvp/MvpActivity.java | 6 ------ 9 files changed, 4 insertions(+), 67 deletions(-) diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt index 32ab95019c..e2be4c4680 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -317,7 +317,6 @@ class MoGoAdasListenerImpl : OnAdasListener { carConfigResp: MessagePad.CarConfigResp? ) { if (carConfigResp != null) { - //todo emArrow startUp时确认数据完整性 AppConfigInfo.dockerVersion = carConfigResp.dockVersion AppConfigInfo.plateNumber = carConfigResp.plateNumber//车牌号 AppConfigInfo.iPCMacAddress = carConfigResp.macAddress//工控机MAC地址 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java index a7748622dc..bf1fc63be2 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java @@ -106,11 +106,6 @@ public class MainActivity extends MvpActivity implement return R.layout.module_main_activity_main; } - @Override - protected void beforeSetContentView(Bundle savedInstanceState) { - init(); - } - @Override protected void initViews() { injectStatusBar(); @@ -152,16 +147,6 @@ public class MainActivity extends MvpActivity implement decorView.addView(statusBarView, statusBarLP); } - // 隐藏布局 - protected void hideLayout() { - mFloatingLayout.setVisibility(View.GONE); - } - - // 显示布局 - protected void showLayout() { - mFloatingLayout.setVisibility(View.VISIBLE); - } - @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -187,7 +172,6 @@ public class MainActivity extends MvpActivity implement AppLaunchTimeUtils.beginTimeCalculate(AppLaunchTimeUtils.HOT_START); } - @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); @@ -216,10 +200,6 @@ public class MainActivity extends MvpActivity implement } } - private void init() { - MogoStatusManager.getInstance().setMainPageLaunchedStatus(TAG, true); - } - private void initConnectInfoRV() { mConnAdapter = new ConnInfoAdapter(this, dataList); mConnectInfoRV.setLayoutManager(new LinearLayoutManager(this)); @@ -464,7 +444,6 @@ public class MainActivity extends MvpActivity implement if (mapUIController != null) { mapUIController.destroy(); } - MogoStatusManager.getInstance().setMainPageLaunchedStatus(TAG, false); MogoStatusManager.getInstance().setMainPageIsBackgroundStatus(TAG, false); CallerLogger.INSTANCE.d(M_HMI + TAG, "destroy."); diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainPresenter.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainPresenter.java index c679dcc4e2..ee82744042 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainPresenter.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainPresenter.java @@ -23,7 +23,7 @@ import com.mogo.eagle.core.function.main.constants.MainConstants; */ public class MainPresenter extends Presenter { - private Handler mMsgHandler = new Handler(Looper.getMainLooper()) { + private final Handler mMsgHandler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); 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 e8e3c08f6e..1e58a823d1 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 @@ -53,12 +53,6 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> - - - > exten protected void onCreate(@Nullable Bundle savedInstanceState) { BarUtils.hideStatusBarAndSticky(this.getWindow()); super.onCreate(savedInstanceState); - beforeSetContentView(savedInstanceState); setContentView(getLayoutId()); initViews(); mPresenter = createPresenter(); @@ -45,11 +44,6 @@ public abstract class MvpActivity> exten super.onResume(); } - - protected void beforeSetContentView(Bundle savedInstanceState) { - - } - /** * 布局资源 * From 0d2e5877a538bb786cc19158340d3b2bf83d6674 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Mon, 5 Dec 2022 15:49:14 +0800 Subject: [PATCH 2/8] =?UTF-8?q?[2.13.0]fix=E6=B6=88=E6=81=AF=E7=9B=92?= =?UTF-8?q?=E5=AD=90=E5=88=97=E8=A1=A8=E6=95=B0=E6=8D=AE=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E5=92=8C=E6=8E=92=E5=BA=8F=E9=94=99=E4=B9=B1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/biz/AIDataCollectWindow.kt | 6 +-- .../badcase/biz/InitiativeBadCaseWindow.kt | 8 +-- .../core/function/hmi/ui/MoGoHmiFragment.kt | 1 - .../hmi/ui/msgbox/DriverMsgBoxListView.kt | 53 +++++++++++++++---- .../hmi/ui/msgbox/PassengerMsgBoxListView.kt | 45 ++++++++++++---- 5 files changed, 86 insertions(+), 27 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt index f692c0d90a..499e30d784 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/AIDataCollectWindow.kt @@ -300,14 +300,14 @@ class AIDataCollectWindow constructor(activity: Activity) : View.OnTouchListener mInViewY = motionEvent.y // 获取相对屏幕的坐标,即以屏幕左上角为原点 mDownInScreenX = motionEvent.rawX - mDownInScreenY = motionEvent.rawY - BarUtils.getStatusBarHeight() + mDownInScreenY = motionEvent.rawY mInScreenX = motionEvent.rawX - mInScreenY = motionEvent.rawY - BarUtils.getStatusBarHeight() + mInScreenY = motionEvent.rawY } MotionEvent.ACTION_MOVE -> { // 更新浮动窗口位置参数 mInScreenX = motionEvent.rawX - mInScreenY = motionEvent.rawY - BarUtils.getStatusBarHeight() + mInScreenY = motionEvent.rawY mWindowParams!!.x = (mInScreenX - mInViewX).toInt() mWindowParams!!.y = (mInScreenY - mInViewY).toInt() // 手指移动的时候更新小悬浮窗的位置 diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt index 6518eb66ac..8f2f8cdda3 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/biz/InitiativeBadCaseWindow.kt @@ -315,14 +315,14 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList mInViewY = motionEvent.y // 获取相对屏幕的坐标,即以屏幕左上角为原点 mDownInScreenX = motionEvent.rawX - mDownInScreenY = motionEvent.rawY - BarUtils.getStatusBarHeight() + mDownInScreenY = motionEvent.rawY mInScreenX = motionEvent.rawX - mInScreenY = motionEvent.rawY - BarUtils.getStatusBarHeight() + mInScreenY = motionEvent.rawY } MotionEvent.ACTION_MOVE -> { // 更新浮动窗口位置参数 mInScreenX = motionEvent.rawX - mInScreenY = motionEvent.rawY - BarUtils.getStatusBarHeight() + mInScreenY = motionEvent.rawY mWindowParams!!.x = (mInScreenX - mInViewX).toInt() mWindowParams!!.y = (mInScreenY - mInViewY).toInt() // 手指移动的时候更新小悬浮窗的位置 @@ -338,7 +338,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList // 默认固定位置,靠屏幕右边缘的中间 mWindowManager!!.defaultDisplay.getMetrics(metrics) mWindowParams!!.x = metrics.widthPixels - mWindowParams!!.y = metrics.heightPixels / 2 - BarUtils.getStatusBarHeight()-350 + mWindowParams!!.y = metrics.heightPixels / 2 - BarUtils.getStatusBarHeight()-950 mWindowManager!!.addView(mFloatLayout, mWindowParams) //开启录包 if(recordCaseEntity!=null){ 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 b7d7139a43..984e95b476 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 @@ -270,7 +270,6 @@ class MoGoHmiFragment : MvpFragment(), if(isChecked){ viewPassengerMsgBoxList.visibility = View.VISIBLE viewPassengerMsgBoxBubble.visibility = View.GONE - viewPassengerMsgBoxList.notifyData() viewPassengerMsgBoxBubble.isShowData(false) CallerHmiManager.updatePassengerMsgBoxTipView(false) }else{ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt index a4606ebcd6..554403778b 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt @@ -3,15 +3,24 @@ package com.mogo.eagle.core.function.hmi.ui.msgbox import android.app.Activity import android.content.Context import android.util.AttributeSet +import android.util.Log import android.view.LayoutInflater import android.view.View import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.LinearLayoutManager +import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.msgbox.MsgBoxBean +import com.mogo.eagle.core.data.msgbox.MsgCategory +import com.mogo.eagle.core.data.msgbox.OperationMsg +import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.ui.msgbox.adapter.DriverMsgBoxListAdapter import com.mogo.eagle.core.function.msgbox.MsgBoxConfig +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.util.TimeUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler import kotlinx.android.synthetic.main.layout_driver_msg_box_list.view.* /** @@ -23,13 +32,13 @@ class DriverMsgBoxListView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 -) : ConstraintLayout(context, attrs, defStyleAttr){ +) : ConstraintLayout(context, attrs, defStyleAttr) , IMsgBoxListener { init { LayoutInflater.from(context).inflate(R.layout.layout_driver_msg_box_list, this, true) initView() } - + private val TAG = "DriverMsgBoxListView" private var noticeList: ArrayList ?= null private var ipcReportList: ArrayList ?= null private var badCaseList: ArrayList ?= null @@ -42,10 +51,13 @@ class DriverMsgBoxListView @JvmOverloads constructor( //获取通知消息列表 noticeList= CallerMsgBoxManager.getCachedNotifyData() as ArrayList? + noticeList = noticeList?.let { ArrayList(it.reversed()) } //获取车辆系统信息列表 ipcReportList = CallerMsgBoxManager.getCachedSysInfoData() as ArrayList? + ipcReportList = ipcReportList?.let { ArrayList(it.reversed()) } //获取录包信息列表 badCaseList = CallerMsgBoxManager.getCachedRecordBagData() as ArrayList? + badCaseList = badCaseList?.let { ArrayList(it.reversed()) } //通知 tvMsgNotice.setOnClickListener { tvMsgNotice.setTextColor(resources.getColor(R.color.msg_box_title_color)) @@ -103,14 +115,6 @@ class DriverMsgBoxListView @JvmOverloads constructor( } fun notifyData(){ - val localNoticeList = MsgBoxConfig.noticeList.reversed() - noticeList?.addAll(0,localNoticeList) - val localSysInfoList = MsgBoxConfig.systemInfoList.reversed() - ipcReportList?.addAll(0,localSysInfoList) - val localRecordList = MsgBoxConfig.recordBagList.reversed() - - badCaseList?.addAll(0,localRecordList) - //获取当前Tab选择 when(MsgBoxConfig.getUserRecord()){ 0 ->{ @@ -162,6 +166,35 @@ class DriverMsgBoxListView @JvmOverloads constructor( } + override fun onDataChanged(category: MsgCategory, msgBoxList: MsgBoxBean) { + UiThreadHandler.post{ + when (category) { + MsgCategory.NOTICE -> { + noticeList?.add(0,msgBoxList) + } + MsgCategory.SYS_INFO -> { + ipcReportList?.add(0,msgBoxList) + } + MsgCategory.RECORD_BAG -> { + badCaseList?.add(0,msgBoxList) + } + } + } + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ + CallerMsgBoxListenerManager.addListener(TAG,this) + } + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ + CallerMsgBoxListenerManager.removeListener(TAG) + } + } } \ 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/msgbox/PassengerMsgBoxListView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxListView.kt index 9b231d917b..f0720f387c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxListView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxListView.kt @@ -7,14 +7,18 @@ import android.view.LayoutInflater import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager +import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.data.msgbox.MsgBoxType -import com.mogo.eagle.core.data.msgbox.V2XMsg +import com.mogo.eagle.core.data.msgbox.MsgCategory +import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.ui.msgbox.adapter.PassengerMsgBoxListAdapter -import com.mogo.eagle.core.function.msgbox.MsgBoxConfig +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.util.ResourceUtils.getDrawable +import com.mogo.eagle.core.utilcode.util.UiThreadHandler import kotlinx.android.synthetic.main.layout_passenger_msg_box_list.view.* /** @@ -26,8 +30,9 @@ class PassengerMsgBoxListView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 -) : ConstraintLayout(context, attrs, defStyleAttr){ +) : ConstraintLayout(context, attrs, defStyleAttr), IMsgBoxListener { + private val TAG = "PassengerMsgBoxListView" var passengerMsgBoxListAdapter: PassengerMsgBoxListAdapter ?= null private var noticeList: ArrayList ?= null @@ -47,18 +52,40 @@ class PassengerMsgBoxListView @JvmOverloads constructor( rvPassengerList.addItemDecoration(divider) //获取通知消息列表 noticeList= CallerMsgBoxManager.getCachedNotifyData() as ArrayList? - noticeList?.reversed() + noticeList = noticeList?.let { ArrayList(it.reversed()) } noticeList?.let { passengerMsgBoxListAdapter?.setData(it) } } - fun notifyData(){ - val localNoticeList = MsgBoxConfig.noticeList.reversed() - noticeList?.addAll(0,localNoticeList) - noticeList?.let { - passengerMsgBoxListAdapter?.setData(it) + override fun onDataChanged(category: MsgCategory, msgBoxList: MsgBoxBean) { + UiThreadHandler.post{ + if(category == MsgCategory.NOTICE){ + if(msgBoxList.type == MsgBoxType.NOTICE || msgBoxList.type == MsgBoxType.V2X + || msgBoxList.type == MsgBoxType.OBU){ + noticeList?.add(0,msgBoxList) + noticeList?.let { + passengerMsgBoxListAdapter?.setData(it) + } + } + } + } + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + if(AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) && + AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)){ + CallerMsgBoxListenerManager.addListener(TAG,this) + } + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + if(AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) && + AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)){ + CallerMsgBoxListenerManager.removeListener(TAG) } } From d06d92846407c1b0f729be19c67c532e55d4e8a3 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Mon, 5 Dec 2022 16:14:07 +0800 Subject: [PATCH 3/8] [2.13.0] update aicloud sdk verion of socket update --- gradle.properties | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/gradle.properties b/gradle.properties index d9d4f30730..d83654b400 100644 --- a/gradle.properties +++ b/gradle.properties @@ -66,23 +66,23 @@ SERVICE_BIZ_VERSION=1.2.4 LOGLIB_VERSION=1.5.8 ######## MogoAiCloudSDK Version ######## # 网络请求LOGLIB_VERSION -MOGO_NETWORK_VERSION=1.4.3.26 +MOGO_NETWORK_VERSION=1.4.3.27 # 鉴权 -MOGO_PASSPORT_VERSION=1.4.3.26 +MOGO_PASSPORT_VERSION=1.4.3.27 # 常链接 -MOGO_SOCKET_VERSION=1.4.3.26 +MOGO_SOCKET_VERSION=1.4.3.27 # 数据采集 -MOGO_REALTIME_VERSION=1.4.3.26 +MOGO_REALTIME_VERSION=1.4.3.27 # 探路,道路事件发布,获取 -MOGO_TANLU_VERSION=1.4.3.26 +MOGO_TANLU_VERSION=1.4.3.27 # 直播推流 -MOGO_LIVE_VERSION=1.4.3.26 +MOGO_LIVE_VERSION=1.4.3.27 # 直播拉流 -MOGO_TRAFFICLIVE_VERSION=1.4.3.26 +MOGO_TRAFFICLIVE_VERSION=1.4.3.27 # 定位服务 -MOGO_LOCATION_VERSION=1.4.3.26 +MOGO_LOCATION_VERSION=1.4.3.27 # 远程通讯模块 -MOGO_TELEMATIC_VERSION=1.4.3.26 +MOGO_TELEMATIC_VERSION=1.4.3.27 ######## MogoAiCloudSDK Version ######## # 自研地图 MAP_SDK_VERSION=2.7.0.10 From 22ce5015164982e94d4563a9d2d223217b8a782f Mon Sep 17 00:00:00 2001 From: zhongchao Date: Mon, 5 Dec 2022 16:22:54 +0800 Subject: [PATCH 4/8] [2.13.0] fix bug of vip warning of hmi tts --- .../mogo/eagle/core/function/v2x/vip/VipCarManager.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt index 018853805a..598a3b7ba9 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt @@ -18,6 +18,7 @@ import com.mogo.eagle.core.data.trafficlight.currentRoadTrafficLight import com.mogo.eagle.core.data.trafficlight.isGreen import com.mogo.eagle.core.data.trafficlight.isRed import com.mogo.eagle.core.data.v2x.VipMessage +import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener import com.mogo.eagle.core.function.api.trafficlight.IMoGoTrafficLightListener import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager @@ -270,6 +271,15 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe CallerMsgBoxManager.saveMsgBox( MsgBoxBean(MsgBoxType.V2X, V2XMsg(v2xType, alertContent.toString(), ttsContent)) ) + CallerHmiManager.warningV2X( + v2xType, alertContent, ttsContent, tag, + object : IMoGoWarningStatusListener { + override fun onShow() {} + override fun onDismiss() {} + }, + true, + 5000L + ) } fun destroy() { From 2784611f37124e04834b183bbcab65337bbe30b1 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Mon, 5 Dec 2022 17:13:31 +0800 Subject: [PATCH 5/8] [2.13.0] revert the layout of test --- .../src/main/res/layout/module_main_activity_main.xml | 6 ++++++ 1 file changed, 6 insertions(+) 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 1e58a823d1..e8e3c08f6e 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 @@ -53,6 +53,12 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> + + + Date: Mon, 5 Dec 2022 18:16:49 +0800 Subject: [PATCH 6/8] =?UTF-8?q?[2.13.0]=20bus=E4=B9=98=E5=AE=A2=E7=AB=AF?= =?UTF-8?q?=E7=AE=97=E8=B7=AFbug=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passenger/model/BusPassengerModel.java | 8 ++-- .../ui/BusPassengerMapDirectionView.java | 44 +++++++++---------- .../ui/BusPassengerRouteFragment.java | 11 +++-- .../utils/CoordinateCalculateRouteUtil.java | 3 +- 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java index 7f9811f074..5262501d14 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java @@ -414,6 +414,8 @@ public class BusPassengerModel { int nextRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndexNew(currentRouteIndex ,mRoutePoints ,stationNext.getGcjLon(),stationNext.getGcjLat()); + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "currentRouteIndex = " + currentRouteIndex + + ", nextRouteIndex = " + nextRouteIndex); if (currentRouteIndex < nextRouteIndex){ //如果找到的next在起点的轨迹前面,直接舍弃这个轨迹,不显示 mTwoStationsRouts.addAll(mRoutePoints.subList(currentRouteIndex,nextRouteIndex)); } @@ -486,17 +488,17 @@ public class BusPassengerModel { } public void loopRouteAndWipe() { - if (mRoutePoints != null && mRoutePoints.size() > 0 && mLocation != null){ + if (mTwoStationsRouts != null && mTwoStationsRouts.size() > 0 && mLocation != null){ int haveArrivedIndex = CoordinateCalculateRouteUtil .getArrivedPointIndexNew(mPreRouteIndex, - mRoutePoints, + mTwoStationsRouts, mLocation.getLongitude(), mLocation.getLatitude()); CallerLogger.INSTANCE.d(M_BUS_P + TAG, "thread = "+ Thread.currentThread().getName()+" haveArrivedIndex== " + haveArrivedIndex); if (mAutopilotPlanningCallback != null){ List routePoints = CoordinateCalculateRouteUtil - .coordinateConverterLocationToLatLng(mContext,mRoutePoints); + .coordinateConverterLocationToLatLng(mContext,mTwoStationsRouts); mAutopilotPlanningCallback.routeResult(routePoints,haveArrivedIndex); } } diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java index 509f908434..5213372938 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java @@ -56,9 +56,8 @@ public class BusPassengerMapDirectionView private int mCurrentIndex = -1; - private int zoomLevel = 13; - private List mCoordinatesLatLng = new ArrayList<>(); //站点坐标数据 - private List mLinePointsLatLng = new ArrayList<>(); //轨迹坐标数据 + private List mCoordinatesLatLng = new ArrayList<>(); //轨迹坐标数据 + private List mLineStationLatLng = new ArrayList<>();//站点坐标数据 private Polyline mPolyline; private CameraUpdate mCameraUpdate; private Context mContext; @@ -200,24 +199,23 @@ public class BusPassengerMapDirectionView //圈定地图显示范围 LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder(); - if (mLinePointsLatLng.size() > 0){ + if (mLineStationLatLng.size() > 0){ //存放经纬度 - for (int i = 0; i < mLinePointsLatLng.size(); i++) { - boundsBuilder.include(mLinePointsLatLng.get(i)); + for (int i = 0; i < mLineStationLatLng.size(); i++) { + boundsBuilder.include(mLineStationLatLng.get(i)); } - boundsBuilder.include(currentLatLng); //第二个参数为四周留空宽度 - mAMap.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(),100,100,100,100)); - } else { - boundsBuilder.include(currentLatLng); + } +// else { //第二个参数为四周留空宽度 - mAMap.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(),100,100,100,100)); //设置希望展示的地图缩放级别 // CameraPosition cameraPosition = new CameraPosition.Builder() // .target(mCarMarker.getPosition()).tilt(0).bearing(location.getBearing()).zoom(zoomLevel).build(); // mAMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); - } +// } + boundsBuilder.include(currentLatLng); + mAMap.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(),100,100,100,100)); } @@ -230,9 +228,9 @@ public class BusPassengerMapDirectionView if (mAMap != null) { addRouteColorList(); - CallerLogger.INSTANCE.d(M_BUS_P + TAG, "mLinePointsLatLng.size() = " +mLinePointsLatLng.size()); - if (mLinePointsLatLng.size() >= 2 && mCoordinatesLatLng.size() > 2) { - + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "mLinePointsLatLng.size() = " +mLineStationLatLng.size() + +" mCoordinatesLatLng.size()= " + mCoordinatesLatLng.size()); + if (mLineStationLatLng.size() >= 2 && mCoordinatesLatLng.size() > 2) { //设置线段纹理 PolylineOptions polylineOptions = new PolylineOptions(); polylineOptions.addAll(mCoordinatesLatLng); @@ -305,7 +303,7 @@ public class BusPassengerMapDirectionView textureList.clear(); texIndexList.clear(); mCoordinatesLatLng.clear(); - mLinePointsLatLng.clear(); + mLineStationLatLng.clear(); CallerLogger.INSTANCE.d(M_BUS_P + TAG, " mCoordinatesLatLng.clear " ); } @@ -353,16 +351,16 @@ public class BusPassengerMapDirectionView mLineMarkers.clear(); } - public void setLineMarkersAndDraw(List lineineLatLngs){ + public void setLineMarkersAndDraw(List stationLatLngs){ clearLineMarkers(); - for (int i = 0; i < lineineLatLngs.size(); i++) { + for (int i = 0; i < stationLatLngs.size(); i++) { Marker mWayPointMarker = mAMap.addMarker(new MarkerOptions() .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_view_dir_way_point))); mLineMarkers.add(mWayPointMarker); } if (mCoordinatesLatLng.size() == 0) { for (int i = 0; i < mLineMarkers.size(); i++) { - mLineMarkers.get(i).setPosition(lineineLatLngs.get(i)); + mLineMarkers.get(i).setPosition(stationLatLngs.get(i)); mLineMarkers.get(i).setVisible(true); } mCurrentIndex = -1; @@ -370,15 +368,15 @@ public class BusPassengerMapDirectionView } public void setLinePointMarkerAndDraw(List routeLineLatLngs, int currentIndex) { - mLinePointsLatLng.clear(); - mLinePointsLatLng.addAll(routeLineLatLngs); + mLineStationLatLng.clear(); + mLineStationLatLng.addAll(routeLineLatLngs); - if (mLinePointsLatLng.size() > 0 && mCurrentIndex != currentIndex) { + if (mLineStationLatLng.size() > 0 && mCurrentIndex != currentIndex) { if (mAMap != null && mLineMarkers.size() > 0) { mCurrentIndex = currentIndex; for (int i = 0; i < mLineMarkers.size(); i++) { if (i != currentIndex && i + 1 != currentIndex) { - mLineMarkers.get(i).setPosition(mLinePointsLatLng.get(i)); + mLineMarkers.get(i).setPosition(mLineStationLatLng.get(i)); mLineMarkers.get(i).setVisible(true); } else { mLineMarkers.get(i).setVisible(false); diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java index 19be9fe6ef..5e345ae9a5 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java @@ -1,6 +1,5 @@ package com.mogo.och.bus.passenger.ui; -import android.location.Location; import android.os.Bundle; import android.view.View; import android.view.animation.Animation; @@ -47,7 +46,7 @@ public class BusPassengerRouteFragment extends private BusPassengerTrafficLightView mTrafficLightView; private List mStationsList = new ArrayList<>(); - private List mLinePointsList = new ArrayList<>(); + private List mLineStationsList = new ArrayList<>(); private TextView mSpeedTv; private ConstraintLayout mNoLineInfoView; @@ -299,19 +298,19 @@ public class BusPassengerRouteFragment extends } private void updateWayPointList(List stations,int currentStationIndex) { - mLinePointsList.clear(); + mLineStationsList.clear(); for (int i = 0; i< stations.size(); i++) {//站点集合 LatLng latLng = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(getContext() ,stations.get(i).getLon(),stations.get(i).getLat());// lat,lon - mLinePointsList.add(latLng); + mLineStationsList.add(latLng); } - setLineMarkers(mLinePointsList); + setLineMarkers(mLineStationsList); if (mMapDirectionView != null) { UiThreadHandler.post(new Runnable() { @Override public void run() { - mMapDirectionView.setLinePointMarkerAndDraw(mLinePointsList,currentStationIndex); + mMapDirectionView.setLinePointMarkerAndDraw(mLineStationsList,currentStationIndex); } }); } diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java index acd799461a..431c41b004 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java @@ -245,7 +245,8 @@ public class CoordinateCalculateRouteUtil { for (int i= preIndex; i < mRoutePoints.size(); i++){ MogoLocation latLng = mRoutePoints.get(i); //todo 先看index对应点的方向和realLocation方向是否一致, 方向角度不能过90度 - if (Math.abs(realLocation.getBearing() - latLng.getBearing()) <= 90){ + if (latLng.getBearing() == realLocation.getBearing() - latLng.getBearing() || + Math.abs(realLocation.getBearing() - latLng.getBearing()) <= 90){ float diff = CoordinateUtils.calculateLineDistance(realLocation.getLongitude(), realLocation.getLatitude(), latLng.getLongitude(),latLng.getLatitude()); From cea43608dc36c9fc5c2ef7db1854c0665da07d32 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Mon, 5 Dec 2022 18:45:19 +0800 Subject: [PATCH 7/8] =?UTF-8?q?[2.13.0]=20bus=E4=B9=98=E5=AE=A2=E7=AB=AF?= =?UTF-8?q?=E8=BD=A8=E8=BF=B9index=E5=88=B0=E7=AB=99=E6=B8=85=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/och/bus/passenger/model/BusPassengerModel.java | 1 + 1 file changed, 1 insertion(+) diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java index 5262501d14..ae69e9f648 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java @@ -206,6 +206,7 @@ public class BusPassengerModel { if (i == 0){ startOrStopRouteAndWipe(false); } + mPreRouteIndex = 0; startOrStopCalculateRouteInfo(false); mRouteLineInfoCallback.updateStationsInfo(stations,i,true); return; From 32ca3026d06a6a7bea02cf9ef268e831c814381d Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Mon, 5 Dec 2022 19:38:42 +0800 Subject: [PATCH 8/8] =?UTF-8?q?[2.13.0=20=E4=BC=98=E5=8C=96obu=E6=98=BE?= =?UTF-8?q?=E7=A4=BA]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../obu/mogo/MogoPrivateObuNewManager.kt | 171 ++++++------------ .../data/enums/EventTypeEnumTrafficLight.kt | 71 ++++++++ .../enums/EventTypeEnumWeaknessTraffic.kt | 4 +- .../icon_warning_v2x_motobike.png | Bin 0 -> 18424 bytes 4 files changed, 131 insertions(+), 115 deletions(-) create mode 100644 core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumTrafficLight.kt create mode 100644 core/mogo-core-res/src/main/function-hmi-res/drawable-xhdpi/icon_warning_v2x_motobike.png diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt index 0a3be5cb96..058d3ec7ad 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuNewManager.kt @@ -4,24 +4,19 @@ import android.content.Context import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.HmiBuildConfig import com.mogo.eagle.core.data.config.HmiBuildConfig.isShowObuLimitSpeedView -import com.mogo.eagle.core.data.enums.EventTypeEnumNew -import com.mogo.eagle.core.data.enums.EventTypeEnumWeaknessTraffic -import com.mogo.eagle.core.data.enums.V2iEventTypeEnum -import com.mogo.eagle.core.data.enums.WarningDirectionEnum +import com.mogo.eagle.core.data.enums.* import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.data.msgbox.MsgBoxType import com.mogo.eagle.core.data.msgbox.V2XMsg import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager -import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.showLimitingVelocity import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.Default import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.TooClose import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.call.obu.CallerObuListenerManager -import com.mogo.eagle.core.function.call.v2x.CallLimitingVelocityListenerManager.invokeOnLimitingVelocityChange import com.mogo.eagle.core.function.obu.mogo.MogoObuConst.TAG_MOGO_OBU import com.mogo.eagle.core.function.obu.mogo.utils.TrafficDataConvertUtilsNew import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger @@ -577,7 +572,7 @@ class MogoPrivateObuNewManager private constructor() { } /** - * 地图匹配 是OBU算法输出地图匹配结果,主车匹配道路哪条路或者哪条车道 TODO + * 地图匹配 是OBU算法输出地图匹配结果,主车匹配道路哪条路或者哪条车道 */ override fun onMogoObuMapMath(data: MogoObuMapMathData?) { super.onMogoObuMapMath(data) @@ -615,7 +610,7 @@ class MogoPrivateObuNewManager private constructor() { * 获取消息的方位 车辆相关 */ private fun getMessageDirection(targetClassification: Int): WarningDirectionEnum { - // CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "预警红边:预警方向->$targetClassification") +// CallerLogger.d("$M_OBU${TAG_MOGO_OBU}", "预警红边:预警方向->$targetClassification") return when (targetClassification) { MogoObuConstants.VEH_TARGET_POSITION.AHEAD_IN_LANE, MogoObuConstants.VEH_TARGET_POSITION.ONCOMING_IN_LANE -> WarningDirectionEnum.ALERT_WARNING_TOP //正前方 @@ -844,75 +839,68 @@ class MogoPrivateObuNewManager private constructor() { //这里需要根据真实数据确定 index 取值方式 val currentLight = lights[0] CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "$M_OBU${TAG_MOGO_OBU}", "currentLight = $currentLight ---currentLight.phase = ${currentLight.phaseId} ---appId = $appId" ) - // 闯红灯预警 + // 闯红灯预警,绿波通行和闯红灯是互斥的 when (appId) { 0x0 -> {//不可用 V2I_RLVW_VIOLATION_TYPE_UNAVAILABLE 无效 } 0x1 -> {//闯红灯 V2I_RLVW_VIOLATION_TYPE_RUNNING_RED_LIGHT TODO 需要约束一个红灯周期只显示一次 - // CallerHmiManager.disableWarningV2X(appId.toString()) -// CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}","changeTrafficLightStatus 闯红灯 --------> ") - // ttsContent = EventTypeEnumNew.getWarningTts(appId.toString()) - // alertContent = EventTypeEnumNew.getWarningContent(appId.toString()) - // CallerHmiManager.warningV2X( - // appId.toString(), alertContent, ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - // appId.toString(), null, true, 5000L, MsgBoxType.OBU - // ) +// CallerHmiManager.disableWarningV2X(0x2.toString()) +// CallerLogger.d("$M_OBU${TAG_MOGO_OBU}","changeTrafficLightStatus 闯红灯 --------> ") +// ttsContent = EventTypeEnumTrafficLight.getWarningTts(appId.toString()) +// alertContent = EventTypeEnumTrafficLight.getWarningContent(appId.toString()) +// CallerHmiManager.warningV2X( +// appId.toString(), alertContent, ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 +// appId.toString(), null, true, 5000L) } - 0x2 -> {//绿波通行引导 V2I_RLVW_VIOLATION_TYPE_NO_VIOLATION TODO 需要约束一个绿灯周期只显示一次 - ttsContent = EventTypeEnumNew.getWarningTts(appId.toString()) - alertContent = EventTypeEnumNew.getWarningContent(appId.toString()) - CallerMsgBoxManager.saveMsgBox( - MsgBoxBean( - MsgBoxType.OBU, - V2XMsg( - appId.toString(), - alertContent, - ttsContent - ) - ) - ) - CallerHmiManager.warningV2X( - appId.toString(), alertContent, ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - appId.toString(), null, true, 3000L - ) - - // 拼接建议速度 - // CallerLogger.d( - // "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - // "绿波通行引导 --------> speed_min = ${currentLight.suggestMinSpeed} --speed_max = ${currentLight.suggestMaxSpeed}" - // ) - // val adviceSpeed = - // "${currentLight.suggestMinSpeed*3.6} - ${currentLight.suggestMaxSpeed*3.6}" - // val adviceSpeedTts = - // "${currentLight.suggestMinSpeed*3.6}到${currentLight.suggestMaxSpeed*3.6}" - // ttsContent = - // String.format( - // EventTypeEnumNew.getWarningTts(EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN.poiType), - // adviceSpeedTts - // ) - // alertContent = - // String.format( - // EventTypeEnumNew.getWarningContent(EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN.poiType), - // adviceSpeed - // ) - // val maxSpeed = currentLight.suggestMaxSpeed*3.6 - // if (maxSpeed > 0) { - // CallerHmiManager.warningV2X( - // EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN.poiType, - // alertContent, - // ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - // appId.toString(), - // null, - // true, - // 5000L, - // MsgBoxType.OBU - // ) - // } + 0x2 -> { //绿波通行引导 V2I_RLVW_VIOLATION_TYPE_NO_VIOLATION TODO 需要约束一个绿灯周期只显示一次 +// CallerHmiManager.disableWarningV2X(0x1.toString()) +// CallerLogger.d( +// "$M_OBU${TAG_MOGO_OBU}", +// "speed_min = ${currentLight.suggestMinSpeed} --speed_max = ${currentLight.suggestMaxSpeed}" +// ) +// val adviceSpeed = +// "${currentLight.suggestMinSpeed} - ${currentLight.suggestMaxSpeed}" +// val adviceSpeedTts = +// "${currentLight.suggestMinSpeed}到${currentLight.suggestMaxSpeed}" +// ttsContent = +// String.format( +// EventTypeEnumTrafficLight.getWarningTts(appId.toString()), +// adviceSpeedTts +// ) +// alertContent = +// String.format( +// EventTypeEnumTrafficLight.getWarningContent(appId.toString()), +// adviceSpeed +// ) +// +// val maxSpeed = currentLight.suggestMaxSpeed +// if (maxSpeed > 0) { +// CallerMsgBoxManager.saveMsgBox( +// MsgBoxBean( +// MsgBoxType.OBU, +// V2XMsg( +// EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN.poiType, +// alertContent, +// ttsContent +// ) +// ) +// ) +// +// CallerHmiManager.warningV2X( +// EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN.poiType, +// alertContent, +// ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 +// appId.toString(), +// null, +// true, +// 5000L +// ) +// } } } @@ -933,6 +921,7 @@ class MogoPrivateObuNewManager private constructor() { val red = currentLight.countDown.toInt() CallerHmiManager.changeCountdownRed(red) } + // 绿灯 4, 5, 6 -> { if (!isGreenLight) { @@ -943,52 +932,8 @@ class MogoPrivateObuNewManager private constructor() { CallerHmiManager.showWarningTrafficLight(3, 2) val green = currentLight.countDown.toInt() CallerHmiManager.changeCountdownGreen(green) - //防止数据出现问题的容错 - CallerHmiManager.changeCountdownRed(0) - CallerHmiManager.changeCountdownYellow(0) - // 拼接建议速度 - CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "speed_min = ${currentLight.suggestMinSpeed} --speed_max = ${currentLight.suggestMaxSpeed}" - ) - val adviceSpeed = - "${currentLight.suggestMinSpeed} - ${currentLight.suggestMaxSpeed}" - val adviceSpeedTts = - "${currentLight.suggestMinSpeed}到${currentLight.suggestMaxSpeed}" - ttsContent = - String.format( - EventTypeEnumNew.getWarningTts(EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN.poiType), - adviceSpeedTts - ) - alertContent = - String.format( - EventTypeEnumNew.getWarningContent(EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN.poiType), - adviceSpeed - ) - - val maxSpeed = currentLight.suggestMaxSpeed - if (maxSpeed > 0) { - CallerMsgBoxManager.saveMsgBox( - MsgBoxBean( - MsgBoxType.OBU, - V2XMsg( - EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN.poiType, - alertContent, - ttsContent - ) - ) - ) - CallerHmiManager.warningV2X( - EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN.poiType, - alertContent, - ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - appId.toString(), - null, - true, - 3000L - ) - } } + // 黄灯 7, 8 -> { CallerHmiManager.disableWarningV2X(appId.toString()) diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumTrafficLight.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumTrafficLight.kt new file mode 100644 index 0000000000..4b3af24b5d --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumTrafficLight.kt @@ -0,0 +1,71 @@ +package com.mogo.eagle.core.data.enums + +import com.mogo.eagle.core.data.R + + +/** + * 交通信号灯 + */ +enum class EventTypeEnumTrafficLight( + val poiType: String, val poiTypeStr: String = "", + val poiTypeStrVr: String = "", + val poiTypeSrcVr: Int = R.drawable.v2x_icon_live_logo, + val content: String = "", val tts: String = "" +) { + + TYPE_USECASE_ID_IVP_RED( + 0x1.toString(), + "闯红灯预警", + poiTypeSrcVr = R.drawable.icon_warning_v2x_traffic_lights_red, + content = "路口红灯,禁止通行", + tts = "路口红灯,禁止通行" + ), + TYPE_USECASE_ID_IVP_GREEN( + 0x2.toString(), + "绿波通行", + poiTypeSrcVr = R.drawable.icon_warning_v2x_traffic_lights_green, + content = "建议车速 %s KM/H", + tts = "建议车速 %s KM/H" + ), + + TYPE_ERROR( + 0.toString(), + "未知/错误/异常", + poiTypeSrcVr = R.drawable.icon_warning_v2x_abnormal_vehicle, + content = "", + tts = "" + ); + + + companion object { + @JvmStatic + fun getWarningIcon(poiType: String?): Int { + return when (poiType) { + TYPE_USECASE_ID_IVP_RED.poiType -> TYPE_USECASE_ID_IVP_RED.poiTypeSrcVr + TYPE_USECASE_ID_IVP_GREEN.poiType -> TYPE_USECASE_ID_IVP_GREEN.poiTypeSrcVr + + else -> TYPE_ERROR.poiTypeSrcVr + } + } + + @JvmStatic + fun getWarningContent(poiType: String?): String { + return when (poiType) { + TYPE_USECASE_ID_IVP_RED.poiType -> TYPE_USECASE_ID_IVP_RED.content + TYPE_USECASE_ID_IVP_GREEN.poiType -> TYPE_USECASE_ID_IVP_GREEN.content + + else -> TYPE_ERROR.content + } + } + + @JvmStatic + fun getWarningTts(poiType: String?): String { + return when (poiType) { + TYPE_USECASE_ID_IVP_RED.poiType -> TYPE_USECASE_ID_IVP_RED.tts + TYPE_USECASE_ID_IVP_GREEN.poiType -> TYPE_USECASE_ID_IVP_GREEN.tts + else -> TYPE_ERROR.tts + } + } + } + +} \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumWeaknessTraffic.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumWeaknessTraffic.kt index 177160dbb9..8ca4806dc1 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumWeaknessTraffic.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumWeaknessTraffic.kt @@ -20,10 +20,10 @@ enum class EventTypeEnumWeaknessTraffic( content = "注意机动车", tts = "注意机动车" ), - TYPE_USECASE_ID_VRUCW_NOT_MOTOR_VEHICLES( //TODO 图标需要换 + TYPE_USECASE_ID_VRUCW_NOT_MOTOR_VEHICLES( 2.toString(), "弱势交通参与者碰撞预警", - poiTypeSrcVr = R.drawable.icon_warning_v2x_motorcycle_collision, + poiTypeSrcVr = R.drawable.icon_warning_v2x_motobike, content = "注意非机动车", tts = "注意非机动车" ), diff --git a/core/mogo-core-res/src/main/function-hmi-res/drawable-xhdpi/icon_warning_v2x_motobike.png b/core/mogo-core-res/src/main/function-hmi-res/drawable-xhdpi/icon_warning_v2x_motobike.png new file mode 100644 index 0000000000000000000000000000000000000000..1ae7992c08dc741fc07bcf3f9114fb31f5ffbc51 GIT binary patch literal 18424 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 literal 0 HcmV?d00001