diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt
index 164d27a233..50c2ead876 100644
--- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt
+++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt
@@ -55,6 +55,8 @@ import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
import com.zhjt.mogo_core_function_devatools.binding.BindingCarManager
import com.zhjt.mogo_core_function_devatools.block.MoGoBlockProviderImpl
import com.zhjt.mogo_core_function_devatools.env.EnvChangeManager
+import com.zhjt.mogo_core_function_devatools.exam.ExamControlManager
+import com.zhjt.mogo_core_function_devatools.exam.ExamControlWindow
import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigCenter.Companion.bizConfigCenter
import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigImpl
import com.zhjt.mogo_core_function_devatools.logcat.CrashLogAnalyticsManager
@@ -417,6 +419,13 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener {
BadCaseManager.initAiCollect(view)
}
+ /**
+ * 展示考试车辆控制窗口
+ */
+ override fun showExamControlWindow(view: View) {
+ ExamControlManager.showExamControlWindow(view)
+ }
+
override fun onReceiveBadCaseRecord(
msgBoxBean: MsgBoxBean,
activity: Activity,
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/exam/ExamControlManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/exam/ExamControlManager.kt
new file mode 100644
index 0000000000..47590f0190
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/exam/ExamControlManager.kt
@@ -0,0 +1,55 @@
+package com.zhjt.mogo_core_function_devatools.exam
+
+import android.view.View
+import androidx.fragment.app.FragmentActivity
+import com.mogo.eagle.core.utilcode.util.ClickUtils
+import com.mogo.eagle.core.utilcode.util.NetworkUtils
+import com.mogo.eagle.core.utilcode.util.ToastUtils
+import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
+
+/**
+ * 考试控制管理
+ */
+internal object ExamControlManager {
+
+ /**
+ * 开启考试车辆控制窗口
+ */
+ fun showExamControlWindow(view: View){
+ val activity = view.context as? FragmentActivity
+ ?: throw IllegalStateException("please ensure context is FragmentActivity.")
+ view.setOnClickListener{
+ if (ClickUtils.isFastClick()){
+ if (NetworkUtils.isConnected()){
+
+ //TODO
+ val examControlWindow = ExamControlWindow(activity)
+ examControlWindow.setClickListener(object: ExamControlWindow.ClickListener{
+ override fun closeWindow() {
+ examControlWindow.hideWindow()
+ }
+ })
+ examControlWindow.showWindow()
+
+
+ if (BadCaseConfig.dockerVersion != null){
+ val examControlWindow = ExamControlWindow(activity)
+ examControlWindow.setClickListener(object: ExamControlWindow.ClickListener{
+ override fun closeWindow() {
+ examControlWindow.hideWindow()
+ }
+ })
+ examControlWindow.showWindow()
+ }else{
+ ToastUtils.showShort("工控机连接状态异常")
+ }
+ }else{
+ ToastUtils.showShort("网络异常,请检查网络")
+ }
+ }else{
+ ToastUtils.showShort("请勿连续点击,稍后再试")
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/exam/ExamControlWindow.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/exam/ExamControlWindow.kt
new file mode 100644
index 0000000000..9983b3880e
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/exam/ExamControlWindow.kt
@@ -0,0 +1,280 @@
+package com.zhjt.mogo_core_function_devatools.exam
+
+import android.annotation.SuppressLint
+import android.app.Activity
+import android.graphics.PixelFormat
+import android.util.DisplayMetrics
+import android.view.Gravity
+import android.view.LayoutInflater
+import android.view.MotionEvent
+import android.view.View
+import android.view.WindowManager
+import android.widget.ImageView
+import android.widget.TextView
+import android.widget.ToggleButton
+import com.mogo.eagle.core.data.enums.EventTypeEnumNew
+import com.mogo.eagle.core.data.msgbox.AutopilotMsg
+import com.mogo.eagle.core.data.msgbox.MsgBoxBean
+import com.mogo.eagle.core.data.msgbox.MsgBoxType
+import com.mogo.eagle.core.data.takeover.TAKE_OVER_REQUEST
+import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
+import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
+import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
+import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
+import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
+import com.mogo.eagle.core.function.call.setting.CallerTakeOverManager
+import com.mogo.eagle.core.utilcode.util.BarUtils
+import com.mogo.eagle.core.utilcode.util.SPUtils
+import com.mogo.eagle.core.utilcode.util.SoundUtils
+import com.zhjt.mogo_core_function_devatools.R
+import kotlin.math.absoluteValue
+
+class ExamControlWindow constructor(activity: Activity): View.OnTouchListener{
+
+ companion object{
+ const val TAG = "ExamControlWindow"
+ }
+
+ private var mActivity: Activity = activity
+ private var mWindowParams: WindowManager.LayoutParams? = null
+ private var mWindowManager: WindowManager? = null
+ private lateinit var mFloatLayout: View
+ private var clickListener: ClickListener? = null
+
+ private var mInViewX = 0f
+ private var mInViewY = 0f
+ private var mInScreenX = 0f
+ private var mInScreenY = 0f
+
+ private var takeOverRequest: Boolean = false
+
+ private lateinit var ivCloseExam: ImageView //关闭按钮
+ private lateinit var tbLaneChange: ToggleButton //障碍物图标
+ private lateinit var tvLineChange: TextView //障碍物文字
+ private lateinit var tbAeb: ToggleButton //制动图标
+ private lateinit var tvAeb: TextView //制动文字
+ private lateinit var tbMapSpeed: ToggleButton //限速图标
+ private lateinit var tvMapSpeed: TextView //限速文字
+ private lateinit var tbRamp: ToggleButton //环岛图标
+ private lateinit var tvRamp: TextView //环岛文字
+ private lateinit var tbStopYield: ToggleButton //停车图标
+ private lateinit var tvStopYield: TextView //停车文字
+ private lateinit var tbSeatMainDriver: ToggleButton //主驾
+ private lateinit var tbSeatPassenger: ToggleButton //副驾
+ private lateinit var tbSeatRear: ToggleButton //乘客
+ private lateinit var ivLineToRight: ImageView //右变道
+ private lateinit var ivLineToLeft: ImageView //左变道
+ private lateinit var ivOverTake: ImageView //超车
+ private lateinit var ivPullOver: ImageView //路边停车
+ private lateinit var ivTakeOverRecover: ImageView //恢复自驾
+ private lateinit var ivTakeOverRequest: ImageView //接管请求
+ private lateinit var ivEmergencyStop: ImageView //应急停车
+
+ init {
+ initFloatWindow()
+ }
+
+ @SuppressLint("InflateParams")
+ private fun initFloatWindow(){
+ mFloatLayout = LayoutInflater.from(mActivity).inflate(R.layout.view_exam_control, null) as View
+ mFloatLayout.setOnTouchListener(this)
+ initEvent()
+ mWindowParams = WindowManager.LayoutParams()
+ mWindowManager = mActivity.windowManager
+ mWindowParams?.let {
+ it.format = PixelFormat.RGBA_8888
+ it.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
+ it.gravity = Gravity.START or Gravity.TOP
+ it.width = 844
+ it.height = 1114
+ it.alpha = 1.0f
+ }
+ }
+
+ private fun initEvent(){
+ ivCloseExam = mFloatLayout.findViewById(R.id.ivCloseExam)
+ tbLaneChange = mFloatLayout.findViewById(R.id.tbLaneChange)
+ tvLineChange = mFloatLayout.findViewById(R.id.tvLineChange)
+ tbAeb = mFloatLayout.findViewById(R.id.tbAeb)
+ tvAeb = mFloatLayout.findViewById(R.id.tvAeb)
+ tbMapSpeed = mFloatLayout.findViewById(R.id.tbMapSpeed)
+ tvMapSpeed = mFloatLayout.findViewById(R.id.tvMapSpeed)
+ tbRamp = mFloatLayout.findViewById(R.id.tbRamp)
+ tvRamp = mFloatLayout.findViewById(R.id.tvRamp)
+ tbStopYield = mFloatLayout.findViewById(R.id.tbStopYield)
+ tvStopYield = mFloatLayout.findViewById(R.id.tvStopYield)
+ tbSeatMainDriver = mFloatLayout.findViewById(R.id.tbSeatMainDriver)
+ tbSeatPassenger = mFloatLayout.findViewById(R.id.tbSeatPassenger)
+ tbSeatRear = mFloatLayout.findViewById(R.id.tbSeatRear)
+ ivLineToRight = mFloatLayout.findViewById(R.id.ivLineToRight)
+ ivLineToLeft = mFloatLayout.findViewById(R.id.ivLineToLeft)
+ ivOverTake = mFloatLayout.findViewById(R.id.ivOverTake)
+ ivPullOver = mFloatLayout.findViewById(R.id.ivPullOver)
+ ivTakeOverRecover = mFloatLayout.findViewById(R.id.ivTakeOverRecover)
+ ivTakeOverRequest = mFloatLayout.findViewById(R.id.ivTakeOverRequest)
+ ivEmergencyStop = mFloatLayout.findViewById(R.id.ivEmergencyStop)
+ //关闭按钮
+ ivCloseExam.setOnClickListener {
+ hideWindow()
+ }
+ //绕障开关
+ tbLaneChange.isChecked = SPUtils.getInstance().getBoolean("lane_change",false)
+ tbLaneChange.setOnCheckedChangeListener{ _, isChecked ->
+ CallerAutoPilotControlManager.sendLaneChangeRestrainValid(isChecked)
+ SPUtils.getInstance().put("lane_change",isChecked)
+ }
+ tvLineChange.setOnClickListener {
+ tbLaneChange.performClick()
+ }
+ //AEB开关
+ tbAeb.isChecked = SPUtils.getInstance().getBoolean("aeb",false)
+ tbAeb.setOnCheckedChangeListener{ _, isChecked ->
+ CallerAutoPilotControlManager.sendAebCmd(isChecked)
+ SPUtils.getInstance().put("aeb",isChecked)
+ }
+ tvAeb.setOnClickListener {
+ tbAeb.performClick()
+ }
+ //地图限速开关
+ tbMapSpeed.isChecked = SPUtils.getInstance().getBoolean("map_speed",false)
+ tbMapSpeed.setOnCheckedChangeListener { _, isChecked ->
+ CallerAutoPilotControlManager.sendHadmapSpeedLimitValid(isChecked)
+ SPUtils.getInstance().put("map_speed",isChecked)
+ }
+ tvMapSpeed.setOnClickListener {
+ tbMapSpeed.performClick()
+ }
+ //环岛模式
+ tbRamp.isChecked = SPUtils.getInstance().getBoolean("ramp",false)
+ tbRamp.setOnCheckedChangeListener { _, isChecked ->
+ CallerAutoPilotControlManager.sendRampThetaValid(isChecked)
+ SPUtils.getInstance().put("ramp",isChecked)
+ }
+ tvRamp.setOnClickListener {
+ tbRamp.performClick()
+ }
+ //停车让行开关
+ tbStopYield.isChecked = SPUtils.getInstance().getBoolean("stop_yield",false)
+ tbStopYield.setOnCheckedChangeListener{ _, isChecked ->
+ CallerAutoPilotControlManager.sendStopYieldValid(isChecked)
+ SPUtils.getInstance().put("stop_yield",isChecked)
+ }
+ tvStopYield.setOnClickListener {
+ tbStopYield.performClick()
+ }
+ //向左变道
+ ivLineToLeft.setOnClickListener{
+ CallerAutoPilotControlManager.sendPlanningLineChangeCmd(1)
+ }
+ //向右变道
+ ivLineToRight.setOnClickListener{
+ CallerAutoPilotControlManager.sendPlanningLineChangeCmd(2)
+ }
+ //路边停车
+ ivPullOver.setOnClickListener{
+ CallerAutoPilotControlManager.sendPlanningPullOverCmd(1)
+ }
+ //超车
+ ivOverTake.setOnClickListener{
+ CallerAutoPilotControlManager.sendPlanningLineChangeCmd(3)
+ }
+ //接管请求
+ ivTakeOverRequest.setOnClickListener{
+ // takeOverRequest 执行时,避免多次提示
+ if (takeOverRequest) {
+ return@setOnClickListener
+ }
+ // 接管请求提示
+ CallerDevaToolsManager.takeOver(TAKE_OVER_REQUEST)
+ CallerHmiManager.warningV2X(
+ EventTypeEnumNew.TAKE_OVER_EVENT.poiType,
+ EventTypeEnumNew.TAKE_OVER_EVENT.content,
+ EventTypeEnumNew.TAKE_OVER_EVENT.tts,
+ object : IMoGoWarningStatusListener {
+ override fun onShow() {
+ takeOverRequest = true
+ CallerTakeOverManager.invokeTakeOverEvent(true)
+ //加入消息盒子
+ CallerMsgBoxManager.saveMsgBox(
+ MsgBoxBean(
+ MsgBoxType.AUTOPILOT, AutopilotMsg(
+ EventTypeEnumNew.TAKE_OVER_EVENT.poiType.toInt(),
+ EventTypeEnumNew.TAKE_OVER_EVENT.content,
+ EventTypeEnumNew.TAKE_OVER_EVENT.tts,
+ System.currentTimeMillis()
+ )
+ )
+ )
+ }
+
+ override fun onDismiss() {
+ takeOverRequest = false
+ CallerTakeOverManager.invokeTakeOverEvent(false)
+ }
+ },expireTime =3000L, isFromObu = false
+ )
+ SoundUtils.playRing(mActivity)
+ }
+ //恢复自驾
+ ivTakeOverRecover.setOnClickListener{
+ CallerAutoPilotControlManager.sendPlanningLineChangeCmd(4)
+ }
+ //应急停车
+ ivEmergencyStop.setOnClickListener {
+ CallerAutoPilotControlManager.sendPlanningPullOverCmd(3)
+ }
+ }
+
+ @SuppressLint("ClickableViewAccessibility")
+ override fun onTouch(v: View?, motionEvent: MotionEvent?): Boolean {
+ when (motionEvent?.action) {
+ MotionEvent.ACTION_DOWN -> {
+ // 获取相对View的坐标,即以此View左上角为原点
+ mInViewX = motionEvent.x
+ mInViewY = motionEvent.y
+ // 获取相对屏幕的坐标,即以屏幕左上角为原点
+ mInScreenX = motionEvent.rawX
+ mInScreenY = motionEvent.rawY
+ }
+ MotionEvent.ACTION_MOVE -> {
+ // 更新浮动窗口位置参数
+ mInScreenX = motionEvent.rawX
+ mInScreenY = motionEvent.rawY
+ if(((mInScreenX - mInViewX)-mWindowParams!!.x).absoluteValue>150 || ((mInScreenY - mInViewY)-mWindowParams!!.y).absoluteValue>150){
+ return true
+ }
+ mWindowParams!!.x = (mInScreenX - mInViewX).toInt()
+ mWindowParams!!.y = (mInScreenY - mInViewY).toInt()
+ // 手指移动的时候更新小悬浮窗的位置
+ mWindowManager!!.updateViewLayout(mFloatLayout, mWindowParams)
+ }
+ }
+ return true
+ }
+
+ fun showWindow() {
+ if (mFloatLayout.parent == null) {
+ val metrics = DisplayMetrics()
+ // 默认固定位置,靠屏幕右边缘的中间
+ mWindowManager!!.defaultDisplay.getMetrics(metrics)
+ mWindowParams!!.x = metrics.widthPixels-890
+ mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-1140
+ mWindowManager!!.addView(mFloatLayout, mWindowParams)
+ }
+ }
+
+ fun hideWindow(){
+ if (mFloatLayout.parent != null){
+ mWindowManager!!.removeView(mFloatLayout)
+ }
+ }
+
+ fun setClickListener(clickListener: ClickListener) {
+ this.clickListener = clickListener
+ }
+
+ interface ClickListener {
+ fun closeWindow()
+ }
+
+}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_exam_control.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_exam_control.png
new file mode 100644
index 0000000000..a40da16f09
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_exam_control.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_exam_control_title.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_exam_control_title.png
new file mode 100644
index 0000000000..585ffb61a2
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_exam_control_title.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_exam_seat_status.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_exam_seat_status.xml
new file mode 100644
index 0000000000..a5c4aef6b3
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_exam_seat_status.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_exam_vehicle_mode.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_exam_vehicle_mode.xml
new file mode 100644
index 0000000000..a5c4aef6b3
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/bg_exam_vehicle_mode.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_emergency_stop_selector.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_emergency_stop_selector.xml
new file mode 100644
index 0000000000..cdd4550690
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_emergency_stop_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_line_to_left_selector.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_line_to_left_selector.xml
new file mode 100644
index 0000000000..b2457ae91d
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_line_to_left_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_line_to_right_selector.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_line_to_right_selector.xml
new file mode 100644
index 0000000000..252b8b2bea
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_line_to_right_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_over_take_selector.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_over_take_selector.xml
new file mode 100644
index 0000000000..ee6d19f6c3
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_over_take_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_pull_over_selector.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_pull_over_selector.xml
new file mode 100644
index 0000000000..ed908b36c1
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_pull_over_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_take_over_recover_selector.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_take_over_recover_selector.xml
new file mode 100644
index 0000000000..ee16c7a210
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_take_over_recover_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_take_over_request_selector.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_take_over_request_selector.xml
new file mode 100644
index 0000000000..107d1aac83
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/exam_take_over_request_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_aeb_normal.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_aeb_normal.png
new file mode 100644
index 0000000000..ce1e907804
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_aeb_normal.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_aeb_pressed.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_aeb_pressed.png
new file mode 100644
index 0000000000..d0af17c447
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_aeb_pressed.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_central_control.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_central_control.png
new file mode 100644
index 0000000000..127af713a5
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_central_control.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_emergency_stop_normal.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_emergency_stop_normal.png
new file mode 100644
index 0000000000..3a9a84b659
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_emergency_stop_normal.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_emergency_stop_pressed.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_emergency_stop_pressed.png
new file mode 100644
index 0000000000..8e1c977419
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_emergency_stop_pressed.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_exam_close.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_exam_close.png
new file mode 100644
index 0000000000..1cfacfa7cd
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_exam_close.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_lane_change_normal.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_lane_change_normal.png
new file mode 100644
index 0000000000..92745cfb2a
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_lane_change_normal.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_lane_change_pressed.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_lane_change_pressed.png
new file mode 100644
index 0000000000..f708d033f0
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_lane_change_pressed.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_line_to_left_normal.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_line_to_left_normal.png
new file mode 100644
index 0000000000..7482f54aaa
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_line_to_left_normal.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_line_to_left_pressed.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_line_to_left_pressed.png
new file mode 100644
index 0000000000..3233076639
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_line_to_left_pressed.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_line_to_right_normal.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_line_to_right_normal.png
new file mode 100644
index 0000000000..3e1b5e01bc
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_line_to_right_normal.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_line_to_right_pressed.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_line_to_right_pressed.png
new file mode 100644
index 0000000000..817f4a295d
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_line_to_right_pressed.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_map_speed_normal.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_map_speed_normal.png
new file mode 100644
index 0000000000..98367889ab
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_map_speed_normal.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_map_speed_pressed.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_map_speed_pressed.png
new file mode 100644
index 0000000000..131d9e4585
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_map_speed_pressed.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_over_take_normal.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_over_take_normal.png
new file mode 100644
index 0000000000..a62e75c72a
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_over_take_normal.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_over_take_pressed.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_over_take_pressed.png
new file mode 100644
index 0000000000..692a14fbdd
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_over_take_pressed.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_pull_over_normal.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_pull_over_normal.png
new file mode 100644
index 0000000000..4a9eab62f3
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_pull_over_normal.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_pull_over_pressed.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_pull_over_pressed.png
new file mode 100644
index 0000000000..d198e112d2
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_pull_over_pressed.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_ramp_normal.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_ramp_normal.png
new file mode 100644
index 0000000000..c52bf24264
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_ramp_normal.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_ramp_pressed.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_ramp_pressed.png
new file mode 100644
index 0000000000..b6b5e17b2f
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_ramp_pressed.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_stop_yield_normal.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_stop_yield_normal.png
new file mode 100644
index 0000000000..cd94d7ae62
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_stop_yield_normal.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_stop_yield_pressed.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_stop_yield_pressed.png
new file mode 100644
index 0000000000..37c52b4a41
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_stop_yield_pressed.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_take_over_recover_normal.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_take_over_recover_normal.png
new file mode 100644
index 0000000000..a54fa85dad
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_take_over_recover_normal.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_take_over_recover_pressed.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_take_over_recover_pressed.png
new file mode 100644
index 0000000000..c8e1060915
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_take_over_recover_pressed.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_take_over_request_normal.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_take_over_request_normal.png
new file mode 100644
index 0000000000..00d1510afc
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_take_over_request_normal.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_take_over_request_pressed.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_take_over_request_pressed.png
new file mode 100644
index 0000000000..4360ad9f90
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/icon_take_over_request_pressed.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/seat_driver_normal_bg.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/seat_driver_normal_bg.png
new file mode 100644
index 0000000000..d89b7aeb2e
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/seat_driver_normal_bg.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/seat_driver_press_bg.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/seat_driver_press_bg.png
new file mode 100644
index 0000000000..d1e60e4e92
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/seat_driver_press_bg.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/seat_rear_normal_bg.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/seat_rear_normal_bg.png
new file mode 100644
index 0000000000..953da2edc1
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/seat_rear_normal_bg.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/seat_rear_press_bg.png b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/seat_rear_press_bg.png
new file mode 100644
index 0000000000..9621aa158c
Binary files /dev/null and b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/seat_rear_press_bg.png differ
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_aeb.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_aeb.xml
new file mode 100644
index 0000000000..d3466aaeb1
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_aeb.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_lane_change.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_lane_change.xml
new file mode 100644
index 0000000000..c3bca4b006
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_lane_change.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_map_speed.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_map_speed.xml
new file mode 100644
index 0000000000..ccf9af9e4c
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_map_speed.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_ramp.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_ramp.xml
new file mode 100644
index 0000000000..4e65c942d0
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_ramp.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_seat_driver.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_seat_driver.xml
new file mode 100644
index 0000000000..e41e39b2b4
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_seat_driver.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_seat_rear.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_seat_rear.xml
new file mode 100644
index 0000000000..89d64d52a0
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_seat_rear.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_stop_yield.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_stop_yield.xml
new file mode 100644
index 0000000000..8fc7e7cd46
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/drawable/selector_stop_yield.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_exam_control.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_exam_control.xml
new file mode 100644
index 0000000000..3684b72e84
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/view_exam_control.xml
@@ -0,0 +1,338 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/values/color.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/values/color.xml
new file mode 100644
index 0000000000..b4c9edcf08
--- /dev/null
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/values/color.xml
@@ -0,0 +1,7 @@
+
+
+
+ #D5D5D5
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml
index de843c7a8f..095996c9f2 100644
--- a/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml
+++ b/core/function-impl/mogo-core-function-devatools/src/main/res/values/strings.xml
@@ -16,4 +16,21 @@
环境
其他
+ 车辆控制
+ 车辆模式
+ 障碍物
+ 制动
+ 限速
+ 环岛
+ 停车
+ 乘坐状态
+ 左变道
+ 右变道
+ 路边停车
+ 超车
+ 接管请求
+ 恢复自驾
+ 应急停车
+ 关闭考试车辆控制
+
\ No newline at end of file
diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt
index ac721b3ae5..356329d740 100644
--- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt
+++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt
@@ -117,6 +117,11 @@ interface IDevaToolsProvider : IProvider {
*/
fun initAiCollect(view: View)
+ /**
+ * 展示考试车辆控制窗口
+ */
+ fun showExamControlWindow(view: View)
+
/**
* 当工控机回调时调用
*/
diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt
index c04b727233..e84a09e65f 100644
--- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt
+++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt
@@ -157,6 +157,13 @@ object CallerDevaToolsManager {
devaToolsProviderApi?.initAiCollect(view)
}
+ /**
+ * 展示考试车辆控制窗口
+ */
+ fun showExamControlWindow(view: View){
+ devaToolsProviderApi?.showExamControlWindow(view)
+ }
+
/**
* 收到工控机回调时触发
*/
diff --git a/core/mogo-core-res/src/main/res/values/dimens.xml b/core/mogo-core-res/src/main/res/values/dimens.xml
index aa3fbd6092..a4e640e404 100644
--- a/core/mogo-core-res/src/main/res/values/dimens.xml
+++ b/core/mogo-core-res/src/main/res/values/dimens.xml
@@ -1032,6 +1032,7 @@
1090dp
1092dp
1100dp
+ 1114dp
1125dp
1170dp
1200dp