Merge branch 'refs/heads/dev_robotaxi-d_240912_6.7.0' into dev_robotaxi-d_240912_6.7.2_local
This commit is contained in:
@@ -25,6 +25,7 @@ import com.mogo.eagle.core.data.config.HmiBuildConfig
|
||||
import com.mogo.eagle.core.data.multidisplay.TelematicConstant
|
||||
import com.mogo.eagle.core.data.obu.MogoObuConst
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarConfigListener
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoGetParamResponseListener
|
||||
import com.mogo.eagle.core.function.api.devatools.mofang.IMoGoMoFangProvider
|
||||
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener
|
||||
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.FUNC_MODE_DEMO
|
||||
@@ -33,6 +34,7 @@ import com.mogo.eagle.core.function.api.setting.ISopSettingListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotGetParamResponseDispatcher
|
||||
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.hmi.CallerHmiViewControlListenerManager
|
||||
@@ -58,6 +60,8 @@ import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils
|
||||
import com.mogo.eagle.core.utilcode.rv.divider.CommonDividerItemDecoration
|
||||
import com.mogo.eagle.core.utilcode.util.AppStateManager
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.zhjt.mogo.adas.data.AdasConstants
|
||||
import com.zhjt.mogo.adas.data.bean.AdasParam
|
||||
import kotlinx.android.synthetic.main.layout_operate_panel.view.iv_operate_panel_close
|
||||
import kotlinx.coroutines.launch
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
@@ -915,7 +919,7 @@ class OperatePanelLayout : LinearLayout {
|
||||
}
|
||||
}
|
||||
|
||||
class VehiclesPreferenceFragmentCompat : OperatePanelDetailBase(), IMoGoAutopilotCarConfigListener, ISopSettingListener, IViewControlListener {
|
||||
class VehiclesPreferenceFragmentCompat : OperatePanelDetailBase(), IMoGoAutopilotCarConfigListener, ISopSettingListener, IViewControlListener, IMoGoGetParamResponseListener {
|
||||
companion object {
|
||||
private const val TAG = "VehiclesPreferenceFragmentCompat"
|
||||
private const val KEY_PNC_PARK_INTERSECTION_CAR = "pnc_park_intersection_car"
|
||||
@@ -938,15 +942,28 @@ class OperatePanelLayout : LinearLayout {
|
||||
private var prevCheckedKeyForFusionMode: String? = null
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
Logger.d(TAG, "--- onCreateView --- 1 ---")
|
||||
if (AppConfigInfo.isConnectAutopilot) {
|
||||
CallerAutoPilotControlManager.getCarConfig()
|
||||
Logger.d(TAG, "--- onCreateView --- 2 ---") //获取车辆配置
|
||||
CallerAutoPilotControlManager.getCarConfig() //查询融合模式
|
||||
CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.FUSION_MODE)
|
||||
CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.OVERTAKE_MAX_SPEED)
|
||||
}
|
||||
CallerAutopilotGetParamResponseDispatcher.addListener(TAG, this)
|
||||
CallerAutopilotCarConfigListenerManager.addListener(TAG, this)
|
||||
CallerSopSettingManager.addListener(TAG, this)
|
||||
CallerHmiViewControlListenerManager.addListener(TAG, this)
|
||||
return super.onCreateView(inflater, container, savedInstanceState)
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
CallerAutopilotGetParamResponseDispatcher.removeListener(TAG)
|
||||
CallerAutopilotCarConfigListenerManager.removeListener(TAG)
|
||||
CallerSopSettingManager.removeListener(TAG)
|
||||
CallerHmiViewControlListenerManager.removeListener(TAG)
|
||||
super.onDestroyView()
|
||||
}
|
||||
|
||||
override fun updateFuncMode(tag: String, boolean: Boolean) {
|
||||
super.updateFuncMode(tag, boolean)
|
||||
if (tag == FUNC_MODE_RAIN) {
|
||||
@@ -957,11 +974,86 @@ class OperatePanelLayout : LinearLayout {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
CallerAutopilotCarConfigListenerManager.removeListener(TAG)
|
||||
CallerSopSettingManager.removeListener(TAG)
|
||||
CallerHmiViewControlListenerManager.removeListener(TAG)
|
||||
super.onDestroyView()
|
||||
override fun onGetParamResp(header: MessagePad.Header, getParamResp: MessagePad.SetParamReq, adasParam: AdasParam) {
|
||||
Logger.d(TAG, "-- onGetParamResp --: fusion-mode:${adasParam.fusionMode}, over-take-speed:${adasParam.overtakeMaxSpeed} ")
|
||||
lifecycleScope.launch {
|
||||
when(adasParam.fusionMode) {
|
||||
1 -> {
|
||||
//全融合模式
|
||||
FunctionBuildConfig.fusionMode = 1
|
||||
prevCheckedKeyForFusionMode?.takeIf { it != KEY_ALL_MERGE_MODE }?.let {
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
changeValue(it, false)
|
||||
}
|
||||
prevCheckedKeyForFusionMode = KEY_ALL_MERGE_MODE
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_ALL_MERGE_MODE)?.also {
|
||||
it.extras.putBoolean("is_checked", true)
|
||||
changeValue(it, true)
|
||||
}
|
||||
}
|
||||
2 -> {
|
||||
//盲区模式
|
||||
FunctionBuildConfig.fusionMode = 2
|
||||
prevCheckedKeyForFusionMode?.takeIf { it != KEY_BLIND_AREA_MODE }?.let {
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
changeValue(it, false)
|
||||
}
|
||||
prevCheckedKeyForFusionMode = KEY_BLIND_AREA_MODE
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_BLIND_AREA_MODE)?.also {
|
||||
it.extras.putBoolean("is_checked", true)
|
||||
changeValue(it, true)
|
||||
}
|
||||
}
|
||||
3 -> {
|
||||
//超视距模式
|
||||
FunctionBuildConfig.fusionMode = 3
|
||||
prevCheckedKeyForFusionMode?.takeIf { it != KEY_BEYOND_VISUAL_RANGE_MODE }?.let {
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
changeValue(it, false)
|
||||
}
|
||||
prevCheckedKeyForFusionMode = KEY_BEYOND_VISUAL_RANGE_MODE
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_BEYOND_VISUAL_RANGE_MODE)?.also {
|
||||
it.extras.putBoolean("is_checked", true)
|
||||
changeValue(it, true)
|
||||
}
|
||||
}
|
||||
4 -> {
|
||||
//透传模式
|
||||
FunctionBuildConfig.fusionMode = 4
|
||||
prevCheckedKeyForFusionMode?.takeIf { it != KEY_TRANSPARENT_TRANSFER_MODE }?.let {
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
changeValue(it, false)
|
||||
}
|
||||
prevCheckedKeyForFusionMode = KEY_TRANSPARENT_TRANSFER_MODE
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_TRANSPARENT_TRANSFER_MODE)?.also {
|
||||
it.extras.putBoolean("is_checked", true)
|
||||
changeValue(it, true)
|
||||
}
|
||||
}
|
||||
5 -> {
|
||||
//纯路侧模式
|
||||
FunctionBuildConfig.fusionMode = 5
|
||||
prevCheckedKeyForFusionMode?.takeIf { it != KEY_PURE_OBU_MODE }?.let {
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
changeValue(it, false)
|
||||
}
|
||||
prevCheckedKeyForFusionMode = KEY_PURE_OBU_MODE
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(KEY_PURE_OBU_MODE)?.also {
|
||||
it.extras.putBoolean("is_checked", true)
|
||||
changeValue(it, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (adasParam.overtakeMaxSpeed > 0) {
|
||||
FunctionBuildConfig.overTakeSpeed = adasParam.overtakeMaxSpeed
|
||||
preferenceScreen.findPreferenceReal<PreferenceWithSpeedSetting>(KEY_OVERTAKE_SPEED_THRESHOLDSS)?.update(listOf("3.0", "12.5", "${FunctionBuildConfig.overTakeSpeed}", "0.5", "m/s"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||
@@ -983,7 +1075,7 @@ class OperatePanelLayout : LinearLayout {
|
||||
lifecycleScope.launch {
|
||||
if (carConfigResp.speedLimit > 0) {
|
||||
FunctionBuildConfig.maxSpeedLimit = min(carConfigResp.speedLimit * 3.6, 60.0)
|
||||
preferenceScreen.findPreferenceReal<PreferenceWithSpeedSetting>(KEY_AUTO_PILOT_SPEED_THRESHOLDS)?.update(listOf("0", "60.0", "${FunctionBuildConfig.maxSpeedLimit}", "5"))
|
||||
preferenceScreen.findPreferenceReal<PreferenceWithSpeedSetting>(KEY_AUTO_PILOT_SPEED_THRESHOLDS)?.update(listOf("0", "60.0", "${FunctionBuildConfig.maxSpeedLimit}", "5", "km/h"))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1018,48 +1110,28 @@ class OperatePanelLayout : LinearLayout {
|
||||
return FunctionBuildConfig.isFaultSlowDown
|
||||
}
|
||||
KEY_ALL_MERGE_MODE -> {
|
||||
val checked = FunctionBuildConfig.fusionMode == 1
|
||||
if (checked) {
|
||||
prevCheckedKeyForFusionMode = KEY_ALL_MERGE_MODE
|
||||
}
|
||||
return checked
|
||||
return false
|
||||
}
|
||||
KEY_BLIND_AREA_MODE -> {
|
||||
val checked = FunctionBuildConfig.fusionMode == 2
|
||||
if (checked) {
|
||||
prevCheckedKeyForFusionMode = KEY_BLIND_AREA_MODE
|
||||
}
|
||||
return checked
|
||||
return false
|
||||
}
|
||||
KEY_BEYOND_VISUAL_RANGE_MODE -> {
|
||||
val checked = FunctionBuildConfig.fusionMode == 3
|
||||
if (checked) {
|
||||
prevCheckedKeyForFusionMode = KEY_BEYOND_VISUAL_RANGE_MODE
|
||||
}
|
||||
return checked
|
||||
return false
|
||||
}
|
||||
KEY_TRANSPARENT_TRANSFER_MODE -> {
|
||||
val checked = FunctionBuildConfig.fusionMode == 4
|
||||
if (checked) {
|
||||
prevCheckedKeyForFusionMode = KEY_TRANSPARENT_TRANSFER_MODE
|
||||
}
|
||||
return checked
|
||||
return false
|
||||
}
|
||||
KEY_PURE_OBU_MODE -> {
|
||||
val checked = FunctionBuildConfig.fusionMode == 5
|
||||
if (checked) {
|
||||
prevCheckedKeyForFusionMode = KEY_PURE_OBU_MODE
|
||||
}
|
||||
return checked
|
||||
return false
|
||||
}
|
||||
KEY_AUTO_PILOT_SPEED_THRESHOLDS -> {
|
||||
return listOf("0.0", "60.0", "${FunctionBuildConfig.maxSpeedLimit}", "5.0")
|
||||
return listOf("0.0", "60.0", "${FunctionBuildConfig.maxSpeedLimit}", "5.0", "km/h")
|
||||
}
|
||||
KEY_CHANGE_LANE_SPEED_THRESHOLDS -> {
|
||||
return listOf("3.0", "7.0", "${FunctionBuildConfig.detouringSpeed}", "0.5")
|
||||
return listOf("3.0", "7.0", "${FunctionBuildConfig.detouringSpeed}", "0.5", "m/s")
|
||||
}
|
||||
KEY_OVERTAKE_SPEED_THRESHOLDSS -> {
|
||||
return listOf("3.0", "12.5", "${FunctionBuildConfig.overTakeSpeed}", "0.5")
|
||||
return listOf("3.0", "12.5", "${FunctionBuildConfig.overTakeSpeed}", "0.5", "m/s")
|
||||
}
|
||||
}
|
||||
return super.getDefaultVal(pref)
|
||||
@@ -1181,6 +1253,10 @@ class OperatePanelLayout : LinearLayout {
|
||||
return true
|
||||
}
|
||||
KEY_ALL_MERGE_MODE -> {
|
||||
if (preference.extras.containsKey("is_checked")) {
|
||||
preference.extras.remove("is_checked")
|
||||
return true
|
||||
}
|
||||
val isChecked = newValue as? Boolean ?: false
|
||||
if (isChecked) {
|
||||
FunctionBuildConfig.fusionMode = 1
|
||||
@@ -1197,6 +1273,10 @@ class OperatePanelLayout : LinearLayout {
|
||||
return isChecked
|
||||
}
|
||||
KEY_BLIND_AREA_MODE -> {
|
||||
if (preference.extras.containsKey("is_checked")) {
|
||||
preference.extras.remove("is_checked")
|
||||
return true
|
||||
}
|
||||
val isChecked = newValue as? Boolean ?: false
|
||||
if (isChecked) {
|
||||
FunctionBuildConfig.fusionMode = 2
|
||||
@@ -1213,15 +1293,19 @@ class OperatePanelLayout : LinearLayout {
|
||||
return isChecked
|
||||
}
|
||||
KEY_BEYOND_VISUAL_RANGE_MODE -> {
|
||||
if (preference.extras.containsKey("is_checked")) {
|
||||
preference.extras.remove("is_checked")
|
||||
return true
|
||||
}
|
||||
val isChecked = newValue as? Boolean ?: false
|
||||
if (isChecked) {
|
||||
FunctionBuildConfig.fusionMode = 3
|
||||
prevCheckedKeyForFusionMode?.takeIf { it != KEY_BEYOND_VISUAL_RANGE_MODE }?.let {
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
prevCheckedKeyForFusionMode = KEY_BEYOND_VISUAL_RANGE_MODE
|
||||
changeValue(it, false)
|
||||
}
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
prevCheckedKeyForFusionMode = KEY_BEYOND_VISUAL_RANGE_MODE
|
||||
changeValue(it, false)
|
||||
}
|
||||
hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode)
|
||||
clickEventAnalytics("融合模式", true)
|
||||
CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode)
|
||||
@@ -1229,15 +1313,19 @@ class OperatePanelLayout : LinearLayout {
|
||||
return isChecked
|
||||
}
|
||||
KEY_TRANSPARENT_TRANSFER_MODE -> {
|
||||
if (preference.extras.containsKey("is_checked")) {
|
||||
preference.extras.remove("is_checked")
|
||||
return true
|
||||
}
|
||||
val isChecked = newValue as? Boolean ?: false
|
||||
if (isChecked) {
|
||||
FunctionBuildConfig.fusionMode = 4
|
||||
prevCheckedKeyForFusionMode?.takeIf { it != KEY_TRANSPARENT_TRANSFER_MODE }?.let {
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
prevCheckedKeyForFusionMode = KEY_TRANSPARENT_TRANSFER_MODE
|
||||
changeValue(it, false)
|
||||
}
|
||||
preferenceScreen.findPreferenceReal<TwoStatePreference>(it)
|
||||
}?.also {
|
||||
prevCheckedKeyForFusionMode = KEY_TRANSPARENT_TRANSFER_MODE
|
||||
changeValue(it, false)
|
||||
}
|
||||
hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode)
|
||||
clickEventAnalytics("融合模式", true)
|
||||
CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode)
|
||||
@@ -1245,6 +1333,10 @@ class OperatePanelLayout : LinearLayout {
|
||||
return isChecked
|
||||
}
|
||||
KEY_PURE_OBU_MODE -> {
|
||||
if (preference.extras.containsKey("is_checked")) {
|
||||
preference.extras.remove("is_checked")
|
||||
return true
|
||||
}
|
||||
val isChecked = newValue as? Boolean ?: false
|
||||
if (isChecked) {
|
||||
FunctionBuildConfig.fusionMode = 5
|
||||
|
||||
@@ -42,13 +42,14 @@ class PreferenceWithSpeedSetting : Preference {
|
||||
override fun onBindViewHolder(holder: PreferenceViewHolder) {
|
||||
super.onBindViewHolder(holder)
|
||||
val speedData = mSpeedData ?: return
|
||||
if (speedData !is List<*> || speedData.size != 4) {
|
||||
if (speedData !is List<*> || speedData.size != 5) {
|
||||
throw AssertionError()
|
||||
}
|
||||
val min = (speedData.elementAt(0) as String).toDouble()
|
||||
val max = (speedData.elementAt(1) as String).toDouble()
|
||||
var cur = (speedData.elementAt(2) as String).toDouble()
|
||||
val step = (speedData.elementAt(3) as String).toDouble()
|
||||
val unit = speedData.elementAt(4) as String
|
||||
if (min > max) {
|
||||
throw AssertionError()
|
||||
}
|
||||
@@ -60,6 +61,8 @@ class PreferenceWithSpeedSetting : Preference {
|
||||
}
|
||||
val ll = holder.findViewById(R.id.ll_speed)
|
||||
val btnOk = holder.findViewById(R.id.bt_ok)
|
||||
val speedUnit = holder.findViewById(R.id.tv_speed_unit) as? TextView
|
||||
speedUnit?.text = unit
|
||||
val speedLimit = holder.findViewById(R.id.tv_speed_limit) as? TextView
|
||||
if (cache.containsKey(key)) {
|
||||
cur = max(cur, cache[key] ?: 0.0)
|
||||
@@ -73,7 +76,7 @@ class PreferenceWithSpeedSetting : Preference {
|
||||
minus.onClickWidthDuration(100) {
|
||||
val minusAfter = cur - step
|
||||
if (minusAfter < min) {
|
||||
ToastUtils.showShort("阈值最小可为${BigDecimal.valueOf(min).setScale(1)}km/h")
|
||||
ToastUtils.showShort("阈值最小为${BigDecimal.valueOf(min).setScale(1)}$unit")
|
||||
return@onClickWidthDuration
|
||||
}
|
||||
cur = minusAfter
|
||||
@@ -89,7 +92,7 @@ class PreferenceWithSpeedSetting : Preference {
|
||||
add.onClickWidthDuration(100) {
|
||||
val addAfter = cur + step
|
||||
if (addAfter > max) {
|
||||
ToastUtils.showShort("阈值最大可为${BigDecimal.valueOf(max).setScale(1)}km/h")
|
||||
ToastUtils.showShort("阈值最大为${BigDecimal.valueOf(max).setScale(1)}$unit")
|
||||
return@onClickWidthDuration
|
||||
}
|
||||
holder.itemView.isEnabled = false
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
package com.mogo.eagle.core.function.hmi.ui.widget
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
import com.mogo.eagle.core.function.hmi.R
|
||||
import com.zhjt.mogo.adas.data.AdasConstants
|
||||
import system_master.SsmInfo
|
||||
import system_master.SystemStatusInfo
|
||||
|
||||
/**
|
||||
* 冷启动呈现二期
|
||||
* 前置展示冷启动过程和结果
|
||||
*/
|
||||
class ColdStartView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener {
|
||||
|
||||
companion object {
|
||||
const val TAG = "ColdStartView"
|
||||
}
|
||||
|
||||
init {
|
||||
LayoutInflater.from(context).inflate(R.layout.view_cold_start, this, true)
|
||||
initView()
|
||||
}
|
||||
|
||||
private fun initView(){
|
||||
|
||||
}
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
|
||||
}
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow()
|
||||
CallerAutoPilotStatusListenerManager.removeListener(TAG)
|
||||
}
|
||||
|
||||
override fun onAutopilotIpcConnectStatusChanged(
|
||||
status: AdasConstants.IpcConnectionStatus,
|
||||
reason: String?
|
||||
){
|
||||
if(status == AdasConstants.IpcConnectionStatus.CONNECTED){
|
||||
//域控连接成功
|
||||
|
||||
}else{
|
||||
//域控连接失败
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 状态查询应答
|
||||
* @param status 数据
|
||||
* HQ、M1 MAP350开始弃用,其他车型MAP360开始弃用
|
||||
*/
|
||||
override fun onAutopilotStatusRespByQuery(status: SystemStatusInfo.StatusInfo) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 定频SSM接口
|
||||
* 1hz hq m1 MAP350开始支持,其他车型MAP360开始支持
|
||||
* 定频SSM接入后 onStatusQueryResp 状态查询应答接口将弃用
|
||||
* @param statusInf 数据
|
||||
*/
|
||||
override fun onSystemStatus(statusInf: SsmInfo.SsmStatusInf) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 939 B |
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners android:radius="@dimen/dp_2"/>
|
||||
<solid android:color="#4CFFFFFF" />
|
||||
|
||||
</shape>
|
||||
@@ -47,11 +47,12 @@
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_speed_unit"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="@dimen/dp_10"
|
||||
android:text="km/h"
|
||||
tools:text="km/h"
|
||||
android:textColor="#ffffff"
|
||||
android:textSize="@dimen/dp_30"
|
||||
tools:ignore="HardcodedText,SpUsage" />
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvSystemStartupTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/sp_70"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivIpcConnectStatus"
|
||||
android:layout_width="@dimen/dp_40"
|
||||
android:layout_height="@dimen/dp_40"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvSystemStartupTitle"
|
||||
app:layout_constraintLeft_toLeftOf="@id/tvSystemStartupTitle"
|
||||
android:contentDescription="@string/ipc_connect_icon"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvIpcConnectContent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="@id/ivIpcConnectStatus"
|
||||
app:layout_constraintBottom_toBottomOf="@id/ivIpcConnectStatus"
|
||||
app:layout_constraintLeft_toRightOf="@id/ivIpcConnectStatus"
|
||||
android:textSize="@dimen/sp_36"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginStart="@dimen/dp_15"
|
||||
/>
|
||||
|
||||
<View
|
||||
android:id="@+id/viewSsmConnectDivider"
|
||||
android:layout_width="@dimen/dp_4"
|
||||
android:layout_height="@dimen/dp_26"
|
||||
app:layout_constraintLeft_toLeftOf="@id/ivIpcConnectStatus"
|
||||
app:layout_constraintRight_toRightOf="@id/ivIpcConnectStatus"
|
||||
app:layout_constraintTop_toBottomOf="@id/ivIpcConnectStatus"
|
||||
android:layout_marginTop="@dimen/dp_5"
|
||||
android:background="@drawable/bg_cold_start_divider"
|
||||
/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivSsmConnectStatus"
|
||||
android:layout_width="@dimen/dp_40"
|
||||
android:layout_height="@dimen/dp_40"
|
||||
app:layout_constraintTop_toBottomOf="@id/viewSsmConnectDivider"
|
||||
app:layout_constraintLeft_toLeftOf="@id/viewSsmConnectDivider"
|
||||
app:layout_constraintRight_toRightOf="@id/viewSsmConnectDivider"
|
||||
android:contentDescription="@string/ssm_connect_icon"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvSsmConnectContent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="@id/ivSsmConnectStatus"
|
||||
app:layout_constraintBottom_toBottomOf="@id/ivSsmConnectStatus"
|
||||
app:layout_constraintLeft_toRightOf="@id/ivSsmConnectStatus"
|
||||
android:textSize="@dimen/sp_36"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginStart="@dimen/dp_15"
|
||||
/>
|
||||
|
||||
<View
|
||||
android:id="@+id/viewColdStartDivider"
|
||||
android:layout_width="@dimen/dp_4"
|
||||
android:layout_height="@dimen/dp_26"
|
||||
app:layout_constraintLeft_toLeftOf="@id/ivSsmConnectStatus"
|
||||
app:layout_constraintRight_toRightOf="@id/ivSsmConnectStatus"
|
||||
app:layout_constraintTop_toBottomOf="@id/ivSsmConnectStatus"
|
||||
android:layout_marginTop="@dimen/dp_5"
|
||||
android:background="@drawable/bg_cold_start_divider"
|
||||
/>
|
||||
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -213,4 +213,7 @@
|
||||
<string name="traffic_light_source">红绿灯信号来源</string>
|
||||
<string name="report_success">已发起上报</string>
|
||||
|
||||
<string name="ipc_connect_icon">域控连接状态图标</string>
|
||||
<string name="ssm_connect_icon">SSM连接状态图标</string>
|
||||
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user