[6.5.1_exam]Taxi考试面板

This commit is contained in:
xuxinchao
2024-07-31 19:22:11 +08:00
parent 57edc8dffb
commit 4ee3b991f7
9 changed files with 199 additions and 69 deletions

View File

@@ -1,10 +1,19 @@
package com.mogo.eagle.core.function.hmi.ui.vehicle
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.graphics.PixelFormat
import android.util.AttributeSet
import android.util.DisplayMetrics
import android.util.Log
import android.view.Gravity
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
import android.view.WindowManager
import android.widget.Button
import android.widget.ToggleButton
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.enums.EventTypeEnumNew
import com.mogo.eagle.core.data.msgbox.AutopilotMsg
@@ -19,57 +28,97 @@ 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.BarUtils
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.*
import kotlin.math.absoluteValue
class TakeOverAutopilotView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null
) : ConstraintLayout(context, attrs) {
class TakeOverAutopilotView constructor(activity: Activity):View.OnTouchListener {
private var takeOverRequest: Boolean = false
private var mActivity: Activity = activity
private lateinit var mFloatLayout: View
private var mWindowParams: WindowManager.LayoutParams? = null
private var mWindowManager: WindowManager? = null
private var mInViewX = 0f
private var mInViewY = 0f
private var mInScreenX = 0f
private var mInScreenY = 0f
private lateinit var btnManualControl: Button
private lateinit var btnOverTake: Button
private lateinit var btnLineToLeft: Button
private lateinit var btnLineToRight: Button
private lateinit var btnPullOver: Button
private lateinit var btnEmergencyStop: Button
private lateinit var btnTakeOverRequest: Button
private lateinit var btnTakeOverRecover: Button
private lateinit var tbLaneChange: ToggleButton
private lateinit var tbAeb: ToggleButton
private lateinit var tbStopYield: ToggleButton
private lateinit var tbMapSpeed: ToggleButton
private lateinit var tbRamp: ToggleButton
init {
LayoutInflater.from(context).inflate(R.layout.view_remote_take_over_autopilot, this, true)
initView()
}
private fun initView() {
mFloatLayout = LayoutInflater.from(mActivity).inflate(R.layout.view_remote_take_over_autopilot, null) as View
mFloatLayout.setOnTouchListener(this)
btnManualControl = mFloatLayout.findViewById(R.id.btn_manual_control)
btnOverTake = mFloatLayout.findViewById(R.id.btn_over_take)
btnLineToLeft = mFloatLayout.findViewById(R.id.btn_line_to_left)
btnLineToRight = mFloatLayout.findViewById(R.id.btn_line_to_right)
btnPullOver = mFloatLayout.findViewById(R.id.btn_pull_over)
btnEmergencyStop = mFloatLayout.findViewById(R.id.btn_emergency_stop)
btnTakeOverRequest = mFloatLayout.findViewById(R.id.btn_take_over_request)
btnTakeOverRecover = mFloatLayout.findViewById(R.id.btn_take_over_recover)
tbLaneChange = mFloatLayout.findViewById(R.id.tb_lane_change)
tbAeb = mFloatLayout.findViewById(R.id.tb_aeb)
tbStopYield = mFloatLayout.findViewById(R.id.tb_stop_yield)
tbMapSpeed = mFloatLayout.findViewById(R.id.tb_map_speed)
tbRamp = mFloatLayout.findViewById(R.id.tb_ramp)
//人工接管
btn_manual_control.setOnClickListener {
btnManualControl.setOnClickListener {
// 退出自驾
CallerAutoPilotControlManager.cancelAutoPilot()
// CallerDevaToolsManager.takeOver(MANUAL_CONTROL)
}
//超车
btn_over_take.setOnClickListener {
btnOverTake.setOnClickListener {
// 超车
CallerAutoPilotControlManager.sendPlanningLineChangeCmd(3)
// CallerDevaToolsManager.takeOver(OVER_TAKE)
}
btn_line_to_left.setOnClickListener {
btnLineToLeft.setOnClickListener {
// 向左变道
CallerAutoPilotControlManager.sendPlanningLineChangeCmd(1)
// CallerDevaToolsManager.takeOver(LINE_TO_LEFT)
}
btn_line_to_right.setOnClickListener {
btnLineToRight.setOnClickListener {
// 向右变道
CallerAutoPilotControlManager.sendPlanningLineChangeCmd(2)
// CallerDevaToolsManager.takeOver(LINE_TO_RIGHT)
}
btn_pull_over.setOnClickListener {
btnPullOver.setOnClickListener {
// 靠边停车
CallerAutoPilotControlManager.sendPlanningPullOverCmd(1)
// CallerDevaToolsManager.takeOver(PULL_OVER)
}
btn_emergency_stop.setOnClickListener {
btnEmergencyStop.setOnClickListener {
// 紧急停车
CallerAutoPilotControlManager.sendPlanningPullOverCmd(3)
// CallerDevaToolsManager.takeOver(EMERGENCY_STOP)
}
//接管请求
btn_take_over_request.setOnClickListener {
btnTakeOverRequest.setOnClickListener {
// takeOverRequest 执行时,避免多次提示
if (takeOverRequest) {
return@setOnClickListener
@@ -103,16 +152,16 @@ class TakeOverAutopilotView @JvmOverloads constructor(
}
},expireTime =3000L, isFromObu = false
)
SoundUtils.playRing(context)
SoundUtils.playRing(mActivity)
}
//恢复自动决策
btn_take_over_recover.setOnClickListener {
btnTakeOverRecover.setOnClickListener {
CallerAutoPilotControlManager.sendPlanningLineChangeCmd(4)
return@setOnClickListener
}
//AEB开关
tb_aeb.isChecked = SPUtils.getInstance().getBoolean("aeb",false)
tb_aeb.setOnCheckedChangeListener{ compoundButton, isChecked ->
tbAeb.isChecked = SPUtils.getInstance().getBoolean("aeb",false)
tbAeb.setOnCheckedChangeListener{ compoundButton, isChecked ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
@@ -120,8 +169,8 @@ class TakeOverAutopilotView @JvmOverloads constructor(
SPUtils.getInstance().put("aeb",isChecked)
}
//绕障开关
tb_lane_change.isChecked = SPUtils.getInstance().getBoolean("lane_change",false)
tb_lane_change.setOnCheckedChangeListener{ compoundButton, isChecked ->
tbLaneChange.isChecked = SPUtils.getInstance().getBoolean("lane_change",false)
tbLaneChange.setOnCheckedChangeListener{ compoundButton, isChecked ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
@@ -129,8 +178,8 @@ class TakeOverAutopilotView @JvmOverloads constructor(
SPUtils.getInstance().put("lane_change",isChecked)
}
//停车让行开关
tb_stop_yield.isChecked = SPUtils.getInstance().getBoolean("stop_yield",false)
tb_stop_yield.setOnCheckedChangeListener{ compoundButton, isChecked ->
tbStopYield.isChecked = SPUtils.getInstance().getBoolean("stop_yield",false)
tbStopYield.setOnCheckedChangeListener{ compoundButton, isChecked ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
@@ -138,8 +187,8 @@ class TakeOverAutopilotView @JvmOverloads constructor(
SPUtils.getInstance().put("stop_yield",isChecked)
}
//地图限速开关
tb_map_speed.isChecked = SPUtils.getInstance().getBoolean("map_speed",false)
tb_map_speed.setOnCheckedChangeListener { compoundButton, isChecked ->
tbMapSpeed.isChecked = SPUtils.getInstance().getBoolean("map_speed",false)
tbMapSpeed.setOnCheckedChangeListener { compoundButton, isChecked ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
@@ -147,14 +196,70 @@ class TakeOverAutopilotView @JvmOverloads constructor(
SPUtils.getInstance().put("map_speed",isChecked)
}
//环岛模式
tb_ramp.isChecked = SPUtils.getInstance().getBoolean("ramp",false)
tb_ramp.setOnCheckedChangeListener { compoundButton, isChecked ->
tbRamp.isChecked = SPUtils.getInstance().getBoolean("ramp",false)
tbRamp.setOnCheckedChangeListener { compoundButton, isChecked ->
if(!compoundButton.isPressed){
return@setOnCheckedChangeListener
}
CallerAutoPilotControlManager.sendRampThetaValid(isChecked)
SPUtils.getInstance().put("ramp",isChecked)
}
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 = 700
it.height = 900
it.alpha = 1.0f
}
}
@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 showFloatWindow() {
if (mFloatLayout.parent == null) {
val metrics = DisplayMetrics()
// 默认固定位置,靠屏幕右边缘的中间
mWindowManager!!.defaultDisplay.getMetrics(metrics)
mWindowParams!!.x = metrics.widthPixels
mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-1140
mWindowManager!!.addView(mFloatLayout, mWindowParams)
}
}
fun hideFloatWindow() {
if (mFloatLayout.parent != null){
mWindowManager!!.removeView(mFloatLayout)
}
}
}

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/color_80FFFFFF"/>
<corners android:radius="20px" />
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<corners android:radius="20px" />
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/remote_take_over_item_press_bg" android:state_pressed="true"/>
<item android:drawable="@drawable/remote_take_over_item_press_bg" android:state_checked="true"/>
<item android:drawable="@drawable/remote_take_over_item_bg" android:state_pressed="false"/>
<item android:drawable="@drawable/remote_take_over_item_bg" />
</selector>

View File

@@ -52,14 +52,4 @@
android:layout_margin="@dimen/dp_20"
/>
<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

@@ -1,16 +1,17 @@
<?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"
android:layout_width="@dimen/dp_700"
android:layout_height="@dimen/dp_900"
android:background="@drawable/bg_remote_take"
>
<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:layout_height="@dimen/dp_90"
android:layout_marginTop="@dimen/dp_20"
android:background="@drawable/remote_take_over_autopilot_bg"
android:gravity="center"
android:text="@string/hmi_take_over"
@@ -23,8 +24,9 @@
<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:layout_height="@dimen/dp_90"
android:layout_marginTop="@dimen/dp_30"
android:background="@drawable/selector_take_over_item"
android:gravity="center"
android:text="@string/hmi_over_take"
android:textColor="#FF181D6D"
@@ -35,9 +37,10 @@
<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:layout_height="@dimen/dp_90"
android:layout_marginTop="@dimen/dp_30"
android:gravity="center"
android:background="@drawable/selector_take_over_item"
android:text="@string/hmi_line_to_left"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
@@ -48,9 +51,10 @@
<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:layout_height="@dimen/dp_90"
android:layout_marginTop="@dimen/dp_30"
android:gravity="center"
android:background="@drawable/selector_take_over_item"
android:text="@string/hmi_line_to_right"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
@@ -60,9 +64,10 @@
<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:layout_height="@dimen/dp_90"
android:layout_marginTop="@dimen/dp_30"
android:gravity="center"
android:background="@drawable/selector_take_over_item"
android:text="@string/hmi_pull_over"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
@@ -72,9 +77,10 @@
<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:layout_height="@dimen/dp_90"
android:layout_marginTop="@dimen/dp_30"
android:gravity="center"
android:background="@drawable/selector_take_over_item"
android:text="@string/hmi_emergency_stop"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
@@ -85,9 +91,10 @@
<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:layout_height="@dimen/dp_90"
android:layout_marginTop="@dimen/dp_30"
android:gravity="center"
android:background="@drawable/selector_take_over_item"
android:text="@string/hmi_take_over_request"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
@@ -96,11 +103,11 @@
<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:layout_width="@dimen/dp_230"
android:layout_height="@dimen/dp_90"
android:layout_marginTop="@dimen/dp_30"
android:gravity="center"
android:background="@drawable/selector_take_over_item"
android:text="@string/hmi_take_over_recover"
android:textColor="#FF181D6D"
android:textSize="@dimen/sp_30"
@@ -111,12 +118,13 @@
<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"
android:layout_width="@dimen/dp_230"
android:layout_height="@dimen/dp_90"
android:layout_marginTop="@dimen/dp_30"
app:layout_constraintTop_toBottomOf="@id/btn_emergency_stop"
app:layout_constraintLeft_toRightOf="@id/btn_take_over_recover"
app:layout_constraintRight_toRightOf="parent"
android:background="@drawable/selector_take_over_item"
android:textOff="@string/hmi_open_lane_change"
android:textOn="@string/hmi_close_lane_change"
android:textColor="#FF181D6D"
@@ -126,12 +134,13 @@
<ToggleButton
android:id="@+id/tb_aeb"
android:layout_width="@dimen/dp_147"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_40"
android:layout_width="@dimen/dp_230"
android:layout_height="@dimen/dp_90"
android:layout_marginTop="@dimen/dp_30"
app:layout_constraintTop_toBottomOf="@id/tb_lane_change"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/tb_stop_yield"
android:background="@drawable/selector_take_over_item"
android:textOff="@string/hmi_open_aeb"
android:textOn="@string/hmi_close_aeb"
android:textColor="#FF181D6D"
@@ -141,12 +150,13 @@
<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"
android:layout_width="@dimen/dp_230"
android:layout_height="@dimen/dp_90"
android:layout_marginTop="@dimen/dp_30"
app:layout_constraintTop_toBottomOf="@id/tb_lane_change"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toRightOf="@id/tb_aeb"
android:background="@drawable/selector_take_over_item"
android:textOff="@string/hmi_open_stop_yield"
android:textOn="@string/hmi_close_stop_yield"
android:textColor="#FF181D6D"
@@ -156,12 +166,13 @@
<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"
android:layout_width="@dimen/dp_230"
android:layout_height="@dimen/dp_90"
android:layout_marginTop="@dimen/dp_30"
app:layout_constraintTop_toBottomOf="@id/tb_aeb"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/tb_ramp"
android:background="@drawable/selector_take_over_item"
android:textOff="@string/hmi_open_map_speed"
android:textOn="@string/hmi_close_map_speed"
android:textColor="#FF181D6D"
@@ -171,12 +182,13 @@
<ToggleButton
android:id="@+id/tb_ramp"
android:layout_width="@dimen/dp_147"
android:layout_height="@dimen/dp_94"
android:layout_marginTop="@dimen/dp_40"
android:layout_width="@dimen/dp_230"
android:layout_height="@dimen/dp_90"
android:layout_marginTop="@dimen/dp_30"
app:layout_constraintTop_toBottomOf="@id/tb_aeb"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toRightOf="@id/tb_map_speed"
android:background="@drawable/selector_take_over_item"
android:textOff="@string/hmi_open_ramp"
android:textOn="@string/hmi_close_ramp"
android:textColor="#FF181D6D"

View File

@@ -46,7 +46,7 @@
<color name="foreground_debug">#FF333333</color>
<color name="foreground_info">#FF333333</color>
<color name="foreground_warn">#FFCCCCCC</color>
<color name="color_80FFFFFF">#80FFFFFF</color>