[6.5.1_exam]合并Taxi考试到主分支

This commit is contained in:
xuxinchao
2024-07-30 18:44:38 +08:00
parent 2c8e80eca8
commit cca38246cc
21 changed files with 965 additions and 25 deletions

View File

@@ -5,7 +5,6 @@ import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.setting.CallerSeatPressureManager
import com.mogo.eagle.core.function.hmi.R
import kotlinx.android.synthetic.main.view_seat_pressure_setting.view.tb_co_driver
import kotlinx.android.synthetic.main.view_seat_pressure_setting.view.tb_main_driver
@@ -42,7 +41,6 @@ class SeatPressureSettingView @JvmOverloads constructor(
}
mainDriverStatus = isChecked
CallerAutoPilotControlManager.sendSeatPressure(mainDriverStatus,coDriverStatus,rearRowStatus)
updateBtnBg(mainDriverStatus,coDriverStatus,rearRowStatus)
}
//副驾
tb_co_driver.isChecked = coDriverStatus
@@ -52,7 +50,6 @@ class SeatPressureSettingView @JvmOverloads constructor(
}
coDriverStatus = isChecked
CallerAutoPilotControlManager.sendSeatPressure(mainDriverStatus,coDriverStatus,rearRowStatus)
updateBtnBg(mainDriverStatus,coDriverStatus,rearRowStatus)
}
//后排
tb_rear_row.isChecked = rearRowStatus
@@ -62,19 +59,8 @@ class SeatPressureSettingView @JvmOverloads constructor(
}
rearRowStatus = isChecked
CallerAutoPilotControlManager.sendSeatPressure(mainDriverStatus,coDriverStatus,rearRowStatus)
updateBtnBg(mainDriverStatus,coDriverStatus,rearRowStatus)
}
}
//TODO 看是否有需要
private fun updateBtnBg(driver: Boolean,copilot: Boolean,backRow: Boolean){
if(driver || copilot || backRow){
//主驾、副驾、后排只要有一个位置有人则开关按钮就显示有人状态
CallerSeatPressureManager.invokeUpdateBgEvent(true)
}else{
//所有座位都没有人则显示无人状态
CallerSeatPressureManager.invokeUpdateBgEvent(false)
}
}
}

View File

@@ -0,0 +1,160 @@
package com.mogo.eagle.core.function.hmi.ui.vehicle
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 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.msgbox.V2XMsg
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.function.hmi.R
import com.mogo.eagle.core.utilcode.util.SPUtils
import com.mogo.eagle.core.utilcode.util.SoundUtils
import kotlinx.android.synthetic.main.view_remote_take_over_autopilot.view.*
import kotlinx.android.synthetic.main.view_sop_setting.view.*
class TakeOverAutopilotView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null
) : ConstraintLayout(context, attrs) {
private var takeOverRequest: Boolean = false
init {
LayoutInflater.from(context).inflate(R.layout.view_remote_take_over_autopilot, this, true)
initView()
}
private fun initView() {
//人工接管
btn_manual_control.setOnClickListener {
// 退出自驾
CallerAutoPilotControlManager.cancelAutoPilot()
// CallerDevaToolsManager.takeOver(MANUAL_CONTROL)
}
//超车
btn_over_take.setOnClickListener {
// 超车
CallerAutoPilotControlManager.sendPlanningLineChangeCmd(3)
// CallerDevaToolsManager.takeOver(OVER_TAKE)
}
btn_line_to_left.setOnClickListener {
// 向左变道
CallerAutoPilotControlManager.sendPlanningLineChangeCmd(1)
// CallerDevaToolsManager.takeOver(LINE_TO_LEFT)
}
btn_line_to_right.setOnClickListener {
// 向右变道
CallerAutoPilotControlManager.sendPlanningLineChangeCmd(2)
// CallerDevaToolsManager.takeOver(LINE_TO_RIGHT)
}
btn_pull_over.setOnClickListener {
// 靠边停车
CallerAutoPilotControlManager.sendPlanningPullOverCmd(1)
// CallerDevaToolsManager.takeOver(PULL_OVER)
}
btn_emergency_stop.setOnClickListener {
// 紧急停车
CallerAutoPilotControlManager.sendPlanningPullOverCmd(3)
// CallerDevaToolsManager.takeOver(EMERGENCY_STOP)
}
//接管请求
btn_take_over_request.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(context)
}
//恢复自动决策
btn_take_over_recover.setOnClickListener {
CallerAutoPilotControlManager.sendPlanningLineChangeCmd(4)
return@setOnClickListener
}
//AEB开关
tb_aeb.isChecked = SPUtils.getInstance().getBoolean("aeb",false)
tb_aeb.setOnCheckedChangeListener{ compoundButton, isChecked ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
CallerAutoPilotControlManager.sendAebCmd(isChecked)
SPUtils.getInstance().put("aeb",isChecked)
}
//绕障开关
tb_lane_change.isChecked = SPUtils.getInstance().getBoolean("lane_change",false)
tb_lane_change.setOnCheckedChangeListener{ compoundButton, isChecked ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
CallerAutoPilotControlManager.sendLaneChangeRestrainValid(isChecked)
SPUtils.getInstance().put("lane_change",isChecked)
}
//停车让行开关
tb_stop_yield.isChecked = SPUtils.getInstance().getBoolean("stop_yield",false)
tb_stop_yield.setOnCheckedChangeListener{ compoundButton, isChecked ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
CallerAutoPilotControlManager.sendStopYieldValid(isChecked)
SPUtils.getInstance().put("stop_yield",isChecked)
}
//地图限速开关
tb_map_speed.isChecked = SPUtils.getInstance().getBoolean("map_speed",false)
tb_map_speed.setOnCheckedChangeListener { compoundButton, isChecked ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
CallerAutoPilotControlManager.sendHadmapSpeedLimitValid(isChecked)
SPUtils.getInstance().put("map_speed",isChecked)
}
//环岛模式
tb_ramp.isChecked = SPUtils.getInstance().getBoolean("ramp",false)
tb_ramp.setOnCheckedChangeListener { compoundButton, isChecked ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
CallerAutoPilotControlManager.sendRampThetaValid(isChecked)
SPUtils.getInstance().put("ramp",isChecked)
}
}
}

View File

@@ -14,10 +14,12 @@ import com.mogo.eagle.core.data.msgbox.V2XMsg
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoParallelDrivingStatusListener
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
import com.mogo.eagle.core.function.api.setting.ITakeOverEventListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerParallelDrivingListenerManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager.saveMsgBox
import com.mogo.eagle.core.function.call.setting.CallerTakeOverManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
@@ -33,7 +35,7 @@ class TakeOverView @JvmOverloads constructor(
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener,
IMoGoParallelDrivingStatusListener {
IMoGoParallelDrivingStatusListener,ITakeOverEventListener {
companion object {
const val TAG = "TakeOverView"
@@ -54,6 +56,7 @@ class TakeOverView @JvmOverloads constructor(
super.onAttachedToWindow()
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
CallerParallelDrivingListenerManager.addListener(TAG,this)
CallerTakeOverManager.addListener(TAG,this)
}
override fun onAutopilotStatusResponse(state: Int) {
@@ -169,6 +172,7 @@ class TakeOverView @JvmOverloads constructor(
super.onDetachedFromWindow()
CallerAutoPilotStatusListenerManager.removeListener(TAG)
CallerParallelDrivingListenerManager.removeListener(TAG)
CallerTakeOverManager.removeListener(TAG)
}
/**
@@ -300,4 +304,14 @@ class TakeOverView @JvmOverloads constructor(
}
}
override fun onTakeOverEvent(isShow: Boolean) {
ThreadUtils.runOnUiThread {
if(isShow){
this@TakeOverView.visibility = View.VISIBLE
}else{
this@TakeOverView.visibility = View.GONE
}
}
}
}

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#A7D3F6"
android:endColor="#8C9AFF"
/>
<corners android:radius="20px" />
</shape>

View File

@@ -3,7 +3,8 @@
android:layout_width="@dimen/dp_800"
android:layout_height="@dimen/dp_1100"
android:background="@color/color_D4D8DC"
xmlns:app="http://schemas.android.com/apk/res-auto">
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<Button
android:id="@+id/mStopCarBtn"
@@ -42,6 +43,7 @@
/>
<com.mogo.eagle.core.function.hmi.ui.setting.SeatPressureSettingView
android:id="@+id/seatPressureSettingView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/mStartCarBtn"
@@ -51,7 +53,13 @@
/>
<com.mogo.eagle.core.function.hmi.ui.vehicle.TakeOverAutopilotView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/seatPressureSettingView"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,187 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="@dimen/dp_631"
android:layout_height="@dimen/dp_1250"
>
<Button
android:id="@+id/btn_manual_control"
style="?android:attr/borderlessButtonStyle"
android:layout_width="@dimen/dp_502"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_80"
android:background="@drawable/remote_take_over_autopilot_bg"
android:gravity="center"
android:text="@string/hmi_take_over"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_34"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_over_take"
android:layout_width="@dimen/dp_147"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_40"
android:gravity="center"
android:text="@string/hmi_over_take"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
app:layout_constraintStart_toStartOf="@+id/btn_manual_control"
app:layout_constraintTop_toBottomOf="@+id/btn_manual_control" />
<Button
android:id="@+id/btn_line_to_left"
android:layout_width="@dimen/dp_147"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_40"
android:gravity="center"
android:text="@string/hmi_line_to_left"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
app:layout_constraintEnd_toStartOf="@+id/btn_line_to_right"
app:layout_constraintStart_toEndOf="@+id/btn_over_take"
app:layout_constraintTop_toBottomOf="@+id/btn_manual_control" />
<Button
android:id="@+id/btn_line_to_right"
android:layout_width="@dimen/dp_147"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_40"
android:gravity="center"
android:text="@string/hmi_line_to_right"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
app:layout_constraintEnd_toEndOf="@+id/btn_manual_control"
app:layout_constraintTop_toBottomOf="@+id/btn_manual_control" />
<Button
android:id="@+id/btn_pull_over"
android:layout_width="@dimen/dp_147"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_40"
android:gravity="center"
android:text="@string/hmi_pull_over"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
app:layout_constraintStart_toStartOf="@+id/btn_manual_control"
app:layout_constraintTop_toBottomOf="@+id/btn_over_take" />
<Button
android:id="@+id/btn_emergency_stop"
android:layout_width="@dimen/dp_147"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_40"
android:gravity="center"
android:text="@string/hmi_emergency_stop"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
app:layout_constraintEnd_toStartOf="@+id/btn_line_to_right"
app:layout_constraintStart_toEndOf="@+id/btn_over_take"
app:layout_constraintTop_toBottomOf="@+id/btn_line_to_left" />
<Button
android:id="@+id/btn_take_over_request"
android:layout_width="@dimen/dp_147"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_40"
android:gravity="center"
android:text="@string/hmi_take_over_request"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
app:layout_constraintEnd_toEndOf="@+id/btn_manual_control"
app:layout_constraintTop_toBottomOf="@+id/btn_line_to_right" />
<Button
android:id="@+id/btn_take_over_recover"
style="?android:attr/borderlessButtonStyle"
android:layout_width="@dimen/dp_147"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_40"
android:gravity="center"
android:text="@string/hmi_take_over_recover"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
app:layout_constraintTop_toBottomOf="@+id/btn_emergency_stop"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/tb_lane_change"
/>
<ToggleButton
android:id="@+id/tb_lane_change"
android:layout_width="@dimen/dp_147"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_40"
app:layout_constraintTop_toBottomOf="@id/btn_emergency_stop"
app:layout_constraintLeft_toRightOf="@id/btn_take_over_recover"
app:layout_constraintRight_toRightOf="parent"
android:textOff="@string/hmi_open_lane_change"
android:textOn="@string/hmi_close_lane_change"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
android:gravity="center"
/>
<ToggleButton
android:id="@+id/tb_aeb"
android:layout_width="@dimen/dp_147"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_40"
app:layout_constraintTop_toBottomOf="@id/tb_lane_change"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/tb_stop_yield"
android:textOff="@string/hmi_open_aeb"
android:textOn="@string/hmi_close_aeb"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
android:gravity="center"
/>
<ToggleButton
android:id="@+id/tb_stop_yield"
android:layout_width="@dimen/dp_147"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_40"
app:layout_constraintTop_toBottomOf="@id/tb_lane_change"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toRightOf="@id/tb_aeb"
android:textOff="@string/hmi_open_stop_yield"
android:textOn="@string/hmi_close_stop_yield"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
android:gravity="center"
/>
<ToggleButton
android:id="@+id/tb_map_speed"
android:layout_width="@dimen/dp_147"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_40"
app:layout_constraintTop_toBottomOf="@id/tb_aeb"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/tb_ramp"
android:textOff="@string/hmi_open_map_speed"
android:textOn="@string/hmi_close_map_speed"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
android:gravity="center"
/>
<ToggleButton
android:id="@+id/tb_ramp"
android:layout_width="@dimen/dp_147"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_40"
app:layout_constraintTop_toBottomOf="@id/tb_aeb"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toRightOf="@id/tb_map_speed"
android:textOff="@string/hmi_open_ramp"
android:textOn="@string/hmi_close_ramp"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
android:gravity="center"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -131,6 +131,25 @@
<string name="road_cross_live_tip">蘑菇为您实时护航中,请放心驾驶!</string>
<string name="hmi_take_over">人工接管</string>
<string name="hmi_over_take">超车</string>
<string name="hmi_line_to_left">向左变道</string>
<string name="hmi_line_to_right">向右变道</string>
<string name="hmi_pull_over">靠边停车</string>
<string name="hmi_emergency_stop">应急停车</string>
<string name="hmi_take_over_request">接管请求</string>
<string name="hmi_take_over_recover">恢复自动决策</string>
<string name="hmi_open_lane_change">障碍物模式</string>
<string name="hmi_close_lane_change">障碍物模式</string>
<string name="hmi_open_aeb">制动模式</string>
<string name="hmi_close_aeb">制动模式</string>
<string name="hmi_open_stop_yield">停车</string>
<string name="hmi_close_stop_yield">停车</string>
<string name="hmi_open_map_speed">限速模式</string>
<string name="hmi_close_map_speed">限速模式</string>
<string name="hmi_open_ramp">环岛模式</string>
<string name="hmi_close_ramp">环岛模式</string>
<string name="hmi_main_driver">主驾</string>
<string name="hmi_co_driver">副驾</string>
<string name="hmi_rear_row">后排</string>