Merge branch 'tmp_6.7.0_arrow' into dev_robotaxi-d_240912_6.7.0

This commit is contained in:
EmArrow
2024-09-13 02:54:44 +08:00
79 changed files with 1381 additions and 101 deletions

View File

@@ -107,7 +107,7 @@
app:layout_goneMarginEnd="40dp"
app:layout_goneMarginTop="@dimen/dp_236" />
<com.mogo.eagle.core.function.hmi.ui.greenwave.GreenWaveView
<com.mogo.eagle.core.function.hmi.ui.widget.GreenWaveView
android:layout_marginTop="@dimen/dp_71"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@@ -114,7 +114,7 @@
android:visibility="invisible"
app:layout_constraintTop_toBottomOf="@+id/viewLimitingVelocity"/>
<com.mogo.eagle.core.function.hmi.ui.greenwave.GreenWaveView
<com.mogo.eagle.core.function.hmi.ui.widget.GreenWaveView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_71"

View File

@@ -104,7 +104,7 @@
android:visibility="invisible"
app:layout_constraintTop_toBottomOf="@+id/viewLimitingVelocity"/>
<com.mogo.eagle.core.function.hmi.ui.greenwave.GreenWaveView
<com.mogo.eagle.core.function.hmi.ui.widget.GreenWaveView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_71"

View File

@@ -104,7 +104,7 @@
android:visibility="invisible"
app:layout_constraintTop_toBottomOf="@+id/viewLimitingVelocity"/>
<com.mogo.eagle.core.function.hmi.ui.greenwave.GreenWaveView
<com.mogo.eagle.core.function.hmi.ui.widget.GreenWaveView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_71"

View File

@@ -139,7 +139,7 @@
app:layout_goneMarginEnd="40dp"
app:layout_goneMarginTop="@dimen/dp_236" />
<com.mogo.eagle.core.function.hmi.ui.greenwave.GreenWaveView
<com.mogo.eagle.core.function.hmi.ui.widget.GreenWaveView
android:layout_width="@dimen/dp_580"
android:layout_height="@dimen/dp_129"
android:layout_marginTop="@dimen/dp_71"
@@ -164,35 +164,33 @@
android:id="@+id/roadV2NEventWindowView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/dp_45"
android:layout_marginTop="@dimen/dp_350"
android:layout_marginRight="@dimen/dp_45"
android:visibility="gone"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:visibility="gone"/>
app:layout_constraintTop_toTopOf="parent" />
<!--自动探查-->
<com.mogo.och.common.module.wigets.rodedata.OchAutomaticExplorationView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="@dimen/dp_350"
android:layout_marginRight="@dimen/dp_50"
app:explorationUser="driver"
android:visibility="gone"
/>
app:explorationUser="driver"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--红绿灯提醒-->
<com.mogo.eagle.core.function.hmi.ui.notice.traffic.TrafficLightPromptView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="@dimen/dp_350"
android:layout_marginRight="@dimen/dp_50"
app:promptUser="driver"
android:visibility="gone"
/>
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:promptUser="driver" />
<!-- 地图marker点击触发路侧直播 -->
<com.mogo.eagle.core.function.hmi.ui.camera.RoadCrossLiveView
@@ -246,13 +244,12 @@
<com.mogo.eagle.core.function.hmi.ui.widget.FusionTrafficLightView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="@dimen/hmi_traffic_light_layout_margin_top"
android:visibility="gone"
app:fusionLightUser="driver"
/>
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--接管提示-->
<com.mogo.eagle.core.function.hmi.ui.vehicle.TakeOverView
@@ -278,12 +275,12 @@
<com.mogo.och.common.module.wigets.map.switchvisual.VisualViewDirver
android:id="@+id/vvd_change_angle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@+id/toolsView"
android:layout_marginBottom="@dimen/dp_48"
android:layout_marginStart="@dimen/dp_618"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_618"
android:layout_marginBottom="@dimen/dp_48"
app:layout_constraintBottom_toTopOf="@+id/toolsView"
app:layout_constraintStart_toStartOf="parent" />
<com.mogo.och.common.module.wigets.map.orderstatus.OrderStatusView
@@ -338,12 +335,12 @@
<com.mogo.och.common.module.wigets.map.drawline.LineView
android:id="@+id/lineView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/rtv_switch"
android:layout_width="@dimen/dp_142"
android:layout_height="@dimen/dp_142"
android:layout_marginStart="-11dp"
android:layout_marginBottom="@dimen/dp_17"
android:layout_width="@dimen/dp_142"
android:layout_height="@dimen/dp_142"/>
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/rtv_switch" />
<com.mogo.eagle.core.function.hmi.ui.widget.RomaDistanceView
android:layout_width="wrap_content"
@@ -424,14 +421,14 @@
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aciv_show_guid"
app:layout_constraintStart_toStartOf="@+id/smallMapView"
app:layout_constraintEnd_toEndOf="@+id/smallMapView"
app:layout_constraintBottom_toTopOf="@+id/smallMapView"
android:layout_width="@dimen/dp_209"
android:layout_height="@dimen/dp_91"
android:layout_marginBottom="-32dp"
android:src="@drawable/taxi_overmap_tag"
android:visibility="gone"
android:layout_marginBottom="-32dp"
android:layout_width="@dimen/dp_209"
android:layout_height="@dimen/dp_91"/>
app:layout_constraintBottom_toTopOf="@+id/smallMapView"
app:layout_constraintEnd_toEndOf="@+id/smallMapView"
app:layout_constraintStart_toStartOf="@+id/smallMapView" />
<com.mogo.eagle.core.function.smp.view.SmallMapView
android:id="@+id/smallMapView"
@@ -456,4 +453,12 @@
app:layout_constraintStart_toStartOf="parent" />
<com.mogo.eagle.core.function.hmi.bone.BoneContainerView
android:id="@+id/boneContainerView"
android:layout_width="@dimen/dp_1046"
android:layout_height="match_parent"
android:elevation="100dp"
android:visibility="visible"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -255,7 +255,7 @@
app:layout_constraintBottom_toTopOf="@id/aciv_xiaozhi_normal"
app:layout_constraintEnd_toEndOf="parent" />
<com.mogo.eagle.core.function.hmi.ui.greenwave.GreenWaveView
<com.mogo.eagle.core.function.hmi.ui.widget.GreenWaveView
android:layout_width="@dimen/dp_580"
android:layout_height="@dimen/dp_156"
android:layout_marginEnd="@dimen/dp_30"

View File

@@ -138,7 +138,7 @@
android:visibility="invisible"
app:layout_constraintTop_toBottomOf="@+id/viewLimitingVelocity"/>
<com.mogo.eagle.core.function.hmi.ui.greenwave.GreenWaveView
<com.mogo.eagle.core.function.hmi.ui.widget.GreenWaveView
android:layout_width="@dimen/dp_580"
android:layout_height="@dimen/dp_129"
android:layout_marginTop="@dimen/dp_71"
@@ -459,5 +459,12 @@
app:layout_constraintStart_toStartOf="parent"
/>
<com.mogo.eagle.core.function.hmi.bone.BoneContainerView
android:id="@+id/boneContainerView"
android:layout_width="@dimen/dp_1046"
android:layout_height="match_parent"
android:elevation="100dp"
android:visibility="visible"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -266,7 +266,7 @@
android:layout_marginBottom="-80dp"
app:layout_constraintEnd_toEndOf="parent" />
<com.mogo.eagle.core.function.hmi.ui.greenwave.GreenWaveView
<com.mogo.eagle.core.function.hmi.ui.widget.GreenWaveView
android:layout_width="@dimen/dp_580"
android:layout_height="@dimen/dp_156"
android:layout_marginEnd="@dimen/dp_30"

View File

@@ -8,7 +8,7 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply from: rootProject.file('gradle/bytex/bytex.gradle')
//apply from: rootProject.file('gradle/bytex/bytex.gradle')
Properties properties = new Properties()
properties.load(project.rootProject.file("gradle.properties").newDataInputStream())

View File

@@ -1,6 +1,7 @@
project.android.productFlavors {
bailing {
dimension "role"
applicationId "com.mogo.launcher.rk.passenger"
externalNativeBuild {
ndk {
// 设置支持的SO库架构
@@ -9,11 +10,11 @@ project.android.productFlavors {
}
manifestPlaceholders = [
CHANNEL_VALUE_BODY : "Driver",
CHANNEL_VALUE_BODY : "Passenger",
]
// ①标识
buildConfigField 'String', 'APP_IDENTITY_MODE_BODY', "\"Driver\""
buildConfigField 'String', 'APP_IDENTITY_MODE_BODY', "\"Passenger\""
}
}

View File

@@ -63,7 +63,7 @@ object ConfigStartUp {
// 这里影响当前Activity的身份信息多进程主进程为司机端:passenger 进程为乘客端
// TODO emArrow isMultiDisplay暂时不启用仅测试3588在B2 2024车预研
if (DebugConfig.isMultiDisplay()) {
if(ProcessUtils.getCurrentProcessName().contains(":passenger")){
if(ProcessUtils.getCurrentProcessName().contains("passenger")){
FunctionBuildConfig.appIdentityMode = "Product_Passenger_${BuildConfig.APP_IDENTITY_MODE_TAIL}"
}else{
FunctionBuildConfig.appIdentityMode = "Product_Driver_${BuildConfig.APP_IDENTITY_MODE_TAIL}"
@@ -125,9 +125,6 @@ object ConfigStartUp {
//白天模式
FunctionBuildConfig.skinMode = 1
}
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
}
val mapParams = MapParams.init()
mapParams.setDebugMode(false)

View File

@@ -9,7 +9,7 @@
<item name="android:windowExitAnimation">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowBackground">@color/app_window_background</item>
<item name="android:windowTranslucentNavigation">false</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowAnimationStyle">@style/Animation</item>
</style>

View File

@@ -20,6 +20,7 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_AD
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_ROUTE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_STATUS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_STATUS_QUERY_RESP
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_SYSTEM_STATUS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_TRAJECTORY
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_V2N_EVENT
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_VEHICLE
@@ -444,9 +445,16 @@ class MoGoAdasListenerImpl : OnAdasListener {
} else {
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().ssmAutoPilotReady = false
}
invokeAutopilotStatusRespByQuery(statusInfo)
}
@ChainLog(
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_SYSTEM_STATUS,
paramIndexes = [0, 1]
)
override fun onSystemStatus(header: MessagePad.Header?, statusInf: SsmInfo.SsmStatusInf?) {
if (statusInf != null && statusInf.hasAutoPilotReady()) {
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().ssmAutoPilotReady =

View File

@@ -166,6 +166,8 @@ class FSMStatus(var state: FSMStateCode, var desc: String = ""): Status(), IAuto
}
override fun isException(): Boolean = state == FSMStateCode.ExistError
fun hasFSMModule(): Boolean = (state == FSMStateCode.ExistNormal) || (state == FSMStateCode.ExistError)
}
/**

View File

@@ -36,12 +36,12 @@ internal class StatusView(private val model: StatusModel, ctx: Context): Constra
override fun onAttachedToWindow() {
super.onAttachedToWindow()
val adapter = model.status.value?.let { data -> StatusAdapter(context, data.second.filter { (it !is IAutopilotPreLaunchStatus) || (it is FSMStatus)}) }?.also { adapter -> rv.adapter = adapter }
val adapter = model.status.value?.let { data -> StatusAdapter(context, data.second.filter { it !is IAutopilotPreLaunchStatus }) }?.also { adapter -> rv.adapter = adapter }
adapter?.let { _ ->
observer?.also { model.status.removeObserver(it) }
model.status.observeForever(Observer<Pair<Status?, ArrayList<Status>>> { data ->
val old = adapter.data
val update = data.second.filter { (it !is IAutopilotPreLaunchStatus) || (it is FSMStatus) }
val update = data.second.filter { it !is IAutopilotPreLaunchStatus }
val result = DiffUtil.calculateDiff(StatusDiffCallback(old, update))
adapter.data = update
result.dispatchUpdatesTo(adapter)

View File

@@ -69,6 +69,7 @@ dependencies {
// releaseImplementation rootProject.ext.dependencies.releaseleakcanary
implementation rootProject.ext.dependencies.arouter
implementation project(path: ':core:function-impl:mogo-core-function-map')
implementation project(':core:function-impl:mogo-core-function-devatools')
kapt rootProject.ext.dependencies.aroutercompiler
implementation rootProject.ext.dependencies.android_start_up

View File

@@ -0,0 +1,25 @@
package com.mogo.eagle.core.function.hmi.bone
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.function.hmi.R
class BoneContainerView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
init {
LayoutInflater.from(context).inflate(R.layout.view_bone_container, this, true)
initView()
}
private fun initView() {
}
}

View File

@@ -0,0 +1,111 @@
package com.mogo.eagle.core.function.hmi.bone
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI
import kotlinx.android.synthetic.main.view_bone_tab.view.carInfoTabView
import kotlinx.android.synthetic.main.view_bone_tab.view.tabSwitchCarInfo
import kotlinx.android.synthetic.main.view_bone_tab.view.tabSwitchMore
import kotlinx.android.synthetic.main.view_bone_tab.view.tabSwitchMsgBox
import kotlinx.android.synthetic.main.view_bone_tab.view.tabSwitchReport
import kotlin.properties.Delegates
class BoneTabLayout @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
companion object{
private const val TAG = "BoneTabLayout"
}
private enum class TabType {
NONE,
CAR_INFO,
MSG_INFO,
REPORT_INFO,
MORE_INFO
}
private var tabType by Delegates.observable(TabType.NONE) { _, oldValue, newValue ->
CallerLogger.i("$M_HMI$TAG", "tabType old:$oldValue , new:$newValue")
if (oldValue != newValue) {
updateTab(oldValue, false)
updateTab(newValue, true)
} else {
updateTab(oldValue, false)
}
}
init {
LayoutInflater.from(context).inflate(R.layout.view_bone_tab, this, true)
initView()
}
private fun initView() {
tabSwitchCarInfo.setOnClickListener {
updateTabType(TabType.CAR_INFO)
}
tabSwitchMsgBox.setOnClickListener {
updateTabType(TabType.MSG_INFO)
}
tabSwitchReport.setOnClickListener {
updateTabType(TabType.REPORT_INFO)
}
tabSwitchMore.setOnClickListener {
updateTabType(TabType.MORE_INFO)
}
}
private fun updateTabType(changeType: TabType) {
tabType = if (tabType == changeType) {
TabType.NONE
} else {
changeType
}
}
private fun updateTab(tabType: TabType, check: Boolean) {
CallerLogger.i("$M_HMI$TAG", "updateTab tabType:$tabType , check:$check")
when (tabType) {
TabType.CAR_INFO -> {
tabSwitchCarInfo.switchTab(check)
carInfoTabView.visibility = if (check) VISIBLE else GONE
}
TabType.MSG_INFO -> {
tabSwitchMsgBox.switchTab(check)
if (check) {
} else {
}
}
TabType.REPORT_INFO -> {
tabSwitchReport.switchTab(check)
if (check) {
} else {
}
}
TabType.MORE_INFO -> {
tabSwitchMore.switchTab(check)
if (check) {
} else {
}
}
else -> {}
}
}
}

View File

@@ -0,0 +1,51 @@
package com.mogo.eagle.core.function.hmi.bone
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.bone.status.StartAutoPilotStatusView
import kotlinx.android.synthetic.main.view_bone_top_status.view.topStatusContainer
class BoneTopStatusLayout @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr),
StartAutoPilotStatusView.IStartAutoPilotStatusChanged {
companion object {
const val TAG = "BoneTopStatusLayout"
}
init {
LayoutInflater.from(context).inflate(R.layout.view_bone_top_status, this, true)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
StartAutoPilotStatusView.addStatusChangedListener(TAG, this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
StartAutoPilotStatusView.removeStatusChangedListener(TAG)
}
override fun onStatusError() {
super.onStatusError()
context?.also {
topStatusContainer.background = ContextCompat.getDrawable(
it, R.drawable.bg_top_status_layout_error
)
}
}
override fun onStatusNormal() {
super.onStatusNormal()
context?.also {
topStatusContainer.background =
ContextCompat.getDrawable(it, R.drawable.bg_top_status_layout_normal)
}
}
}

View File

@@ -0,0 +1,62 @@
package com.mogo.eagle.core.function.hmi.bone
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.function.hmi.R
import kotlinx.android.synthetic.main.view_tab_switch.view.ivTabClick
import kotlinx.android.synthetic.main.view_tab_switch.view.ivTabClickBg
import kotlinx.android.synthetic.main.view_tab_switch.view.ivTabDefault
class TabSwitchView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
private var tabDefaultRes = -1
private var tabClickRes = -1
private var tabClickBgRes = -1
private var isCheck = false
init {
LayoutInflater.from(context).inflate(R.layout.view_tab_switch, this, true)
try {
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.TabSwitch)
tabDefaultRes = typedArray.getResourceId(R.styleable.TabSwitch_defaultRes, -1)
tabClickRes = typedArray.getResourceId(R.styleable.TabSwitch_clickRes, -1)
tabClickBgRes = typedArray.getResourceId(R.styleable.TabSwitch_clickBgRes, -1)
typedArray.recycle()
} catch (e: Exception) {
e.printStackTrace()
}
initView()
}
private fun initView() {
ivTabDefault.setImageResource(tabDefaultRes)
ivTabClick.setImageResource(tabClickRes)
ivTabClickBg.setImageResource(tabClickBgRes)
}
fun switchTab(isCheck: Boolean) {
if (isCheck != this.isCheck) {
this.isCheck = isCheck
notifyView()
}
}
private fun notifyView() {
if (isCheck) {
ivTabClick.visibility = View.VISIBLE
ivTabClickBg.visibility = View.VISIBLE
} else {
ivTabClick.visibility = View.GONE
ivTabClickBg.visibility = View.GONE
}
}
}

View File

@@ -0,0 +1,264 @@
package com.mogo.eagle.core.function.hmi.bone.status
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import chassis.Chassis
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.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.zhjt.mogo_core_function_devatools.status.StatusManager
import com.zhjt.mogo_core_function_devatools.status.entity.AcceleratorStatus
import com.zhjt.mogo_core_function_devatools.status.entity.BrakeStatus
import com.zhjt.mogo_core_function_devatools.status.entity.DoubleFlashStatus
import com.zhjt.mogo_core_function_devatools.status.entity.FSMStateCode
import com.zhjt.mogo_core_function_devatools.status.entity.FSMStatus
import com.zhjt.mogo_core_function_devatools.status.entity.GearStatus
import com.zhjt.mogo_core_function_devatools.status.entity.IAutopilotPreLaunchStatus
import com.zhjt.mogo_core_function_devatools.status.entity.SpeedStatus
import com.zhjt.mogo_core_function_devatools.status.entity.Status
import com.zhjt.mogo_core_function_devatools.status.entity.SteerStatus
import kotlinx.android.synthetic.main.view_start_autopilot_status.view.fSMStatusLayout
import kotlinx.android.synthetic.main.view_start_autopilot_status.view.iv_accelerator
import kotlinx.android.synthetic.main.view_start_autopilot_status.view.iv_brake
import kotlinx.android.synthetic.main.view_start_autopilot_status.view.iv_double_flash
import kotlinx.android.synthetic.main.view_start_autopilot_status.view.iv_steer
import kotlinx.android.synthetic.main.view_start_autopilot_status.view.tv_gear
import kotlinx.android.synthetic.main.view_start_autopilot_status.view.withoutFSMStatusLayout
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.atomic.AtomicBoolean
/**
* 自动驾驶相关的状态展示view
* 1, 有 FSM 模块:展示 FSM 的当前状态,启动自驾时人工干预主要由 FSM 拦截,非自驾/自驾 状态都展示异常
* 2无 FSM 模块:展示 启动前 档位/方向盘/油门/刹车/双闪 等状态,人工干预由鹰眼判断拦截,鹰眼数据源为 CanAdapter,
* 如果当前在自动驾驶状态 则不显示人工干预异常状态
*/
class StartAutoPilotStatusView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), StatusManager.IStatusListener {
companion object {
private const val TAG = "StartAutoPilotStatusView"
private val statusChangedListeners by lazy { ConcurrentHashMap<String, IStartAutoPilotStatusChanged>() }
fun addStatusChangedListener(tag: String, listener: IStartAutoPilotStatusChanged) {
if (statusChangedListeners.containsKey(tag)) {
statusChangedListeners.remove(tag)
}
statusChangedListeners[tag] = listener
}
fun removeStatusChangedListener(tag: String) {
statusChangedListeners.remove(tag)
}
}
private val hasFSM by lazy { AtomicBoolean(false) }
init {
LayoutInflater.from(context).inflate(R.layout.view_start_autopilot_status, this, true)
initView()
}
private fun initView() {
// 默认展示 有 FSM 的情况,未知状态
changeStatusContainer(true)
handleFSM(FSMStatus(FSMStateCode.UnKnown, "未知"))
}
/**
* 根据是否有 FSM 切换展示的容器
*/
private fun changeStatusContainer(hasFSMModule: Boolean) {
CallerLogger.i(TAG, "changeStatusContainer 切换展示hasFSM=$hasFSMModule")
if (hasFSMModule) {
fSMStatusLayout?.visibility = View.VISIBLE
withoutFSMStatusLayout?.visibility = View.GONE
} else {
fSMStatusLayout?.visibility = View.GONE
withoutFSMStatusLayout?.visibility = View.VISIBLE
}
}
private fun handleFSM(status: FSMStatus) {
Logger.d(TAG, "--- handleFSM ---:${status.isException()}")
val lastHasFSM = hasFSM.get()
val newHasFSM = status.hasFSMModule()
hasFSM.set(newHasFSM)
if (lastHasFSM != newHasFSM) {
changeStatusContainer(status.hasFSMModule())
}
when (status.state) {
FSMStateCode.UnKnown -> {
fSMStatusLayout?.setOnClickListener(null)
fSMStatusLayout?.setImageDrawable(
ContextCompat.getDrawable(
context,
R.drawable.icon_fsm_status_bg_unknown
)
)
}
FSMStateCode.NotExist -> {
fSMStatusLayout?.setOnClickListener(null)
fSMStatusLayout?.setImageDrawable(
ContextCompat.getDrawable(
context,
R.drawable.icon_fsm_status_bg_unknown
)
)
}
FSMStateCode.ExistNormal -> {
fSMStatusLayout?.setOnClickListener(null)
fSMStatusLayout?.setImageDrawable(
ContextCompat.getDrawable(
context,
R.drawable.icon_fsm_status_bg_normal
)
)
}
FSMStateCode.ExistError -> {
// TODO
fSMStatusLayout?.onClick {
ToastUtils.showLong("onClick")
}
fSMStatusLayout?.setImageDrawable(
ContextCompat.getDrawable(
context,
R.drawable.icon_fsm_status_bg_error
)
)
}
}
notifyStatus(status.isException())
}
private fun handleWithoutFSM(status: Status) {
val isError =
status.isException() && CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING
Logger.d(TAG, "--- handleWithoutFSM ---: $isError")
when (status) {
is GearStatus -> {
val position = try {
Chassis.GearPosition.valueOf(status.value)
} catch (ignore: Throwable) {
Chassis.GearPosition.GEAR_NONE
}
if (tv_gear?.isEnabled == true) {
tv_gear?.isEnabled = false
}
when (position) {
Chassis.GearPosition.GEAR_N -> {
tv_gear.isEnabled = isError
tv_gear.text = "N"
}
Chassis.GearPosition.GEAR_R -> {
tv_gear.isEnabled = isError
tv_gear.text = "R"
}
Chassis.GearPosition.GEAR_P -> {
tv_gear.isEnabled = isError
tv_gear.text = "P"
}
Chassis.GearPosition.GEAR_D -> {
tv_gear.isEnabled = isError
tv_gear.text = "D"
}
Chassis.GearPosition.GEAR_NONE -> {
tv_gear.isEnabled = false
tv_gear.text = ""
}
else -> {}
}
}
is AcceleratorStatus -> {
iv_accelerator?.isSelected = isError
}
is BrakeStatus -> {
iv_brake?.isSelected = isError
}
is DoubleFlashStatus -> {
iv_double_flash?.isSelected = isError
}
is SteerStatus -> {
iv_steer?.isSelected = isError
}
is SpeedStatus -> {
// TODO
}
else -> {
Logger.d(TAG, "other state: $status")
}
}
notifyStatus(isError)
}
private fun notifyStatus(isError: Boolean) {
statusChangedListeners.values.forEach { itx ->
if (isError) {
itx.onStatusError()
} else {
itx.onStatusNormal()
}
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
StatusManager.addListener(TAG, this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
StatusManager.removeListener(TAG)
}
/**
* @param changed: 变化的数据
* @param all: 所有状态数据
*/
override fun onStatusChanged(changed: List<Status>, all: List<Status>) {
changed.filter { it is IAutopilotPreLaunchStatus }.forEach { status ->
when (status) {
is FSMStatus -> {
handleFSM(status)
}
else -> {
handleWithoutFSM(status)
}
}
}
}
interface IStartAutoPilotStatusChanged {
fun onStatusNormal() {}
fun onStatusError() {}
}
}

View File

@@ -0,0 +1,243 @@
package com.mogo.eagle.core.function.hmi.bone.tab
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarConfigListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener
import com.mogo.eagle.core.function.api.hmi.autopilot.IMoGoCheckAutoPilotBtnListener
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.CallerChassisLocationWGS84ListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.ui.tools.OfflineMapDialog
import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI
import com.mogo.eagle.core.utilcode.util.AppUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.map.MogoData
import kotlinx.android.synthetic.main.view_car_info_tab.view.tvADMapVersion
import kotlinx.android.synthetic.main.view_car_info_tab.view.tvADVersion
import kotlinx.android.synthetic.main.view_car_info_tab.view.tvCarExit
import kotlinx.android.synthetic.main.view_car_info_tab.view.tvCarLoginInfo
import kotlinx.android.synthetic.main.view_car_info_tab.view.tvCarNo
import kotlinx.android.synthetic.main.view_car_info_tab.view.tvHDMapUpdate
import kotlinx.android.synthetic.main.view_car_info_tab.view.tvPADUpdate
import kotlinx.android.synthetic.main.view_car_info_tab.view.tvPadVersion
import kotlinx.android.synthetic.main.view_car_info_tab.view.tvSnInfo
import mogo.telematics.pad.MessagePad
import system_master.SsmInfo
import system_master.SystemStatusInfo
private fun String.parsePlateNo(): String {
return substring(0, 2) + " " + substring(2)
}
private fun String.parsePhoneNo(): String {
return take(3) + "****" + takeLast(4)
}
class CarInfoTabView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoCheckAutoPilotBtnListener,
IMoGoAutopilotStatusListener, IMoGoDevaToolsListener, IMoGoAutopilotCarConfigListener {
companion object {
private const val TAG = "CarInfoTabView"
}
private var loginOut: (() -> Unit)? = null
@Volatile
private var isHDCached = false
init {
LayoutInflater.from(context).inflate(R.layout.view_car_info_tab, this, true)
initView()
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
CallerHmiListenerManager.addListener(TAG, this)
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
CallerAutopilotCarConfigListenerManager.addListener(TAG, this)
CallerDevaToolsListenerManager.addListener(TAG, this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
CallerHmiListenerManager.removeListener(TAG)
CallerAutoPilotStatusListenerManager.removeListener(TAG)
CallerDevaToolsListenerManager.removeListener(TAG)
}
private fun initView() {
showCurrentPadVersion()
showCurrentAdVersion()
updateAdHdMapVersion()
tvSnInfo.text = SharedPrefsMgr.getInstance().sn
if (AppConfigInfo.plateNumber.isNotEmpty()) {
val plateNo = AppConfigInfo.plateNumber
tvCarNo.text = plateNo.parsePlateNo()
}
tvCarExit.setOnClickListener {
loginOut?.invoke()
}
//鹰眼版本 检查更新
tvPADUpdate.setOnClickListener {
HmiActionLog.hmiAction(
"${SceneConstant.M_HMI}${TAG}",
"pad version view clicked"
)
val provider = CallerDevaToolsManager.upgradeProvider()
if (provider?.isDownloading() == true) {
ToastUtils.showShort("正在下载最新版本,请稍候再试...")
return@setOnClickListener
}
CallerDevaToolsManager.queryAppUpgrade()
}
//高精地图 检查更新
tvHDMapUpdate.setOnClickListener {
HmiActionLog.hmiAction(
"${SceneConstant.M_HMI}${TAG}",
mapOf("isHDCached" to isHDCached)
)
if (isHDCached) { // 已缓存
ToastUtils.showShort(resources.getString(R.string.offline_had_downloaded))
} else {// 未缓存
if (CallerMapUIServiceManager.getCityCode().isNullOrEmpty()) {// 未拿到高德的cityCode
if ((CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().longitude <= 0.0 && CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().latitude <= 0.0)) {// 未拿到高精的经纬度
ToastUtils.showShort(resources.getString(R.string.location_try_again))
} else { // 拿到了高精的经纬度
val dialog = OfflineMapDialog(context)
dialog.location =
CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84()
dialog.show()
}
} else {// 拿到高德的cityCode
OfflineMapDialog(context).show()
}
}
}
MogoData.mogoMapData.get()?.isCityDataCached {
updateHDDataCacheStatus(it)
}
}
private fun showCurrentPadVersion() {
tvPadVersion.text = tvPadVersion.text.toString() + AppUtils.getAppVersionName()
}
fun setLoginInfo(loginNo: String) {
if (loginNo.isNotEmpty()) {
tvCarLoginInfo.text = loginNo.parsePhoneNo()
} else {
tvCarLoginInfo.text = ""
}
}
fun setCarNo(carNo: String) {
// 监听工控的车牌信息,防止调试跳过无车牌内容(链接先后顺序不一致也会导致数据显示异常)
if (carNo.isNotEmpty()) {
if (tvCarNo.text.isNotEmpty() && tvCarNo.text == carNo) {
CallerLogger.i("$M_HMI$TAG", "已存在车牌号")
return
}
tvCarNo.visibility = VISIBLE
tvCarNo.text = carNo.parsePlateNo()
} else {
tvCarNo.visibility = GONE
tvCarNo.text = ""
}
}
override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) {
super.onAutopilotCarConfig(carConfigResp)
carConfigResp.plateNumber?.let {
if (tvCarNo.text.isNotEmpty() && tvCarNo.text == it) {
return
}
tvCarNo.visibility = VISIBLE
tvCarNo.text = it.parsePlateNo()
}
}
fun loginOut(loginOut: (() -> Unit)) {
this.loginOut = loginOut
}
override fun updateHDDataCacheStatus(isCached: Boolean) {
isHDCached = isCached
}
private fun showCurrentAdVersion() {
UiThreadHandler.post {
CallerAutoPilotStatusListenerManager.getDockerVersion()?.let {
tvADVersion.text = tvADVersion.text.toString() + it
}
}
}
override fun onAutopilotDockerInfo(dockerVersion: String) {
super.onAutopilotDockerInfo(dockerVersion)
showCurrentAdVersion()
}
private fun updateAdHdMapVersion() {
if (AppConfigInfo.adHdMapVersion.isNotEmpty()) {
tvADMapVersion.text = tvADMapVersion.text.toString() + AppConfigInfo.adHdMapVersion
}
}
override fun onAutopilotStatusRespByQuery(status: SystemStatusInfo.StatusInfo) {
CallerLogger.i(SceneConstant.M_HMI + TAG, "hdMapVer=" + status.hdMapVer)
//hdMapVer返回示例/home/mogo/autopilot/share/hadmap_engine/data/hadmap_data/db.sqlite|bj|2.2.7|对bus路线上的junction进行修改对原609场景修改为6091、6092、6201、 6202四种细分场景并对通往园区路口改为619
if (status.hdMapVer != null && status.hdMapVer.isNotEmpty()) {
//对地图版本进行截取
val city = status.hdMapVer.substringAfter(".sqlite|").substringBefore("|")
val version = status.hdMapVer.substringAfter("$city|").substringBefore("|")
AppConfigInfo.adHdMapVersion = "${city}_${version}"
updateAdHdMapVersion()
}
}
/**
* 定频SSM接口
* 1hz hq m1 MAP350开始支持其他车型MAP360开始支持
* 定频SSM接入后 onStatusQueryResp 状态查询应答接口将弃用
* @param statusInf 数据
*/
override fun onSystemStatus(statusInf: SsmInfo.SsmStatusInf) {
CallerLogger.i(SceneConstant.M_HMI + TAG, "hdMapVer=" + statusInf.hdMapVer)
//hdMapVer返回示例/home/mogo/autopilot/share/hadmap_engine/data/hadmap_data/db.sqlite|bj|2.2.7|对bus路线上的junction进行修改对原609场景修改为6091、6092、6201、 6202四种细分场景并对通往园区路口改为619
if (statusInf.hdMapVer != null && statusInf.hdMapVer.isNotEmpty()) {
//对地图版本进行截取
val city = statusInf.hdMapVer.substringAfter(".sqlite|").substringBefore("|")
val version = statusInf.hdMapVer.substringAfter("$city|").substringBefore("|")
AppConfigInfo.adHdMapVersion = "${city}_${version}"
updateAdHdMapVersion()
}
}
}

View File

@@ -1,11 +1,9 @@
package com.mogo.eagle.core.function.hmi.ui
import android.content.Context
import android.telecom.Call
import android.text.TextUtils
import android.view.Gravity
import android.view.ViewGroup
import android.view.WindowManager
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.lifecycle.lifecycleScope
import com.alibaba.android.arouter.facade.annotation.Route
@@ -32,7 +30,6 @@ import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
import com.mogo.eagle.core.function.call.v2x.CallerTurnLightListenerManager
import com.mogo.eagle.core.function.hmi.ui.camera.RoadVideoDialog
import com.mogo.eagle.core.function.hmi.ui.greenwave.GreenWaveView
import com.mogo.eagle.core.function.hmi.ui.lookaround.M1LookAroundView
import com.mogo.eagle.core.function.hmi.ui.notice.DispatchDialogManager
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeCheckDialog
@@ -49,7 +46,6 @@ import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog
import com.mogo.eagle.core.function.hmi.ui.widget.StatusBarView
import com.mogo.eagle.core.function.hmi.xiaozhi.XiaoZhiStateManager
import com.mogo.eagle.core.utilcode.floating.MoGoPopWindow
import com.mogo.eagle.core.utilcode.kotlin.lifeCycleScope
import com.mogo.eagle.core.utilcode.kotlin.safeCancel
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger

View File

@@ -1,30 +0,0 @@
package com.mogo.eagle.core.function.hmi.ui.switch
import android.content.Context
import android.util.AttributeSet
import android.view.View
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
class DemoModeHiddenSwitch(context: Context, attrs: AttributeSet?) : View(context, attrs) {
init {
isClickable = true
setOnClickListener {
//只在司机端设置美化模式开关功能
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
//单次查询,是否有行程信息(订单进行中时点击不生效),autopilotControlParameters为null代表不处于自动驾驶状态下
if (CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().autopilotControlParameters == null) {
FunctionBuildConfig.isDemoMode = !FunctionBuildConfig.isDemoMode
CallerAutoPilotControlManager.setDemoMode(FunctionBuildConfig.isDemoMode)
if (!FunctionBuildConfig.isDemoMode) {
//关闭美化模式时,通知工控机
CallerAutoPilotControlManager.setIPCDemoMode(FunctionBuildConfig.isDemoMode)
}
}
}
}
}
}

View File

@@ -1,8 +1,7 @@
package com.mogo.eagle.core.function.hmi.ui.map
package com.mogo.eagle.core.function.hmi.ui.tools
import android.annotation.SuppressLint
import android.content.Context
import android.os.Looper
import android.view.View
import android.widget.ImageView
import android.widget.ProgressBar
@@ -13,12 +12,8 @@ import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.call.hmi.CallerHmiListenerManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog
import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog
import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog.Companion.hmiAction
import com.mogo.eagle.core.function.hmi.ui.widget.SystemVersionView
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.map.MogoData.Companion.mogoMapData
import me.jessyan.autosize.utils.AutoSizeUtils

View File

@@ -1,4 +1,4 @@
package com.mogo.eagle.core.function.hmi.ui.greenwave
package com.mogo.eagle.core.function.hmi.ui.widget
import android.content.Context
import android.util.AttributeSet

View File

@@ -2,7 +2,6 @@ package com.mogo.eagle.core.function.hmi.ui.widget
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
@@ -19,15 +18,13 @@ import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.ui.map.OfflineMapDialog
import com.mogo.eagle.core.function.hmi.ui.tools.OfflineMapDialog
import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog.Companion.hmiAction
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI
import com.mogo.eagle.core.utilcode.util.*
import com.mogo.map.MogoData.Companion.mogoMapData
import kotlinx.android.synthetic.main.view_system_version.view.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import system_master.SsmInfo
import system_master.SystemStatusInfo
@@ -56,6 +53,7 @@ class SystemVersionView @JvmOverloads constructor(
private var previousProgress: Int = -1 //前一秒的下载进度,用于计算下载剩余时间
private var currentProgress: Int = -1 //当前已下载包体大小
@Volatile
private var isHDCached = false
init {
@@ -70,7 +68,7 @@ class SystemVersionView @JvmOverloads constructor(
//鹰眼版本视图点击事件
ivPadVersion.setOnClickListener {
hmiAction("$M_HMI$$TAG", "pad version view clicked")
hmiAction("$M_HMI$TAG", "pad version view clicked")
val provider = CallerDevaToolsManager.upgradeProvider()
if (provider?.isDownloading() == true) {
ToastUtils.showShort("正在下载最新版本,请稍候再试...")

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1019 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/icon_status_accelerator_error" />
<item android:drawable="@drawable/icon_status_accelerator_normal" />
</selector>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/icon_status_brake_error" />
<item android:drawable="@drawable/icon_status_brake_normal" />
</selector>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/icon_status_double_flash_error" />
<item android:drawable="@drawable/icon_status_double_flash_normal" />
</selector>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:drawable="@drawable/icon_status_gear_bg_error" />
<item android:state_enabled="false" android:drawable="@drawable/icon_status_gear_bg_normal" />
</selector>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/icon_status_steer_error" />
<item android:drawable="@drawable/icon_status_steer_normal" />
</selector>

View File

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

View File

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

View File

@@ -0,0 +1,34 @@
<?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="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bone_bg"
android:layout_gravity="center">
<com.mogo.eagle.core.function.hmi.bone.BoneTopStatusLayout
android:id="@+id/boneTopStatusLayout"
android:layout_width="match_parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginStart="@dimen/dp_19"
android:layout_height="wrap_content"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clBoneBiz"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_385"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.mogo.eagle.core.function.hmi.bone.BoneTabLayout
android:id="@+id/clBoneTab"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_385"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,82 @@
<?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_960"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clBoneTabChild"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.mogo.eagle.core.function.hmi.bone.tab.CarInfoTabView
android:id="@+id/carInfoTabView"
android:layout_width="@dimen/dp_960"
android:layout_height="@dimen/dp_1137"
android:layout_marginStart="@dimen/dp_40"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_224"
android:layout_marginStart="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_m_2"
android:background="@drawable/bg_tab_switch"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent">
<com.mogo.eagle.core.function.hmi.bone.TabSwitchView
android:id="@+id/tabSwitchCarInfo"
android:layout_width="@dimen/dp_220"
android:layout_height="@dimen/dp_140"
android:layout_marginStart="@dimen/dp_40"
android:layout_marginTop="@dimen/dp_20"
app:clickBgRes="@drawable/icon_tab_click_bg"
app:clickRes="@drawable/icon_tab_car_info_click"
app:defaultRes="@drawable/icon_tab_car_info"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.mogo.eagle.core.function.hmi.bone.TabSwitchView
android:id="@+id/tabSwitchMsgBox"
android:layout_width="@dimen/dp_220"
android:layout_height="@dimen/dp_140"
android:layout_marginTop="@dimen/dp_20"
app:clickBgRes="@drawable/icon_tab_click_bg"
app:clickRes="@drawable/icon_tab_msg_box_click"
app:defaultRes="@drawable/icon_tab_msg_box"
app:layout_constraintLeft_toRightOf="@+id/tabSwitchCarInfo"
app:layout_constraintTop_toTopOf="parent" />
<com.mogo.eagle.core.function.hmi.bone.TabSwitchView
android:id="@+id/tabSwitchReport"
android:layout_width="@dimen/dp_220"
android:layout_height="@dimen/dp_140"
android:layout_marginTop="@dimen/dp_20"
app:clickBgRes="@drawable/icon_tab_click_bg"
app:clickRes="@drawable/icon_tab_report_click"
app:defaultRes="@drawable/icon_tab_report"
app:layout_constraintLeft_toRightOf="@+id/tabSwitchMsgBox"
app:layout_constraintTop_toTopOf="parent" />
<com.mogo.eagle.core.function.hmi.bone.TabSwitchView
android:id="@+id/tabSwitchMore"
android:layout_width="@dimen/dp_220"
android:layout_height="@dimen/dp_140"
android:layout_marginTop="@dimen/dp_20"
app:clickBgRes="@drawable/icon_tab_click_bg"
app:clickRes="@drawable/icon_tab_more_click"
app:defaultRes="@drawable/icon_tab_more"
app:layout_constraintLeft_toRightOf="@+id/tabSwitchReport"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,16 @@
<?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:id="@+id/topStatusContainer"
android:layout_width="@dimen/dp_964"
android:layout_height="@dimen/dp_357"
android:background="@drawable/bg_top_status_layout_normal">
<com.mogo.eagle.core.function.hmi.bone.status.StartAutoPilotStatusView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_59"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,230 @@
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_tab_item">
<View
android:id="@+id/topViewPos"
android:layout_width="@dimen/dp_856"
android:layout_height="@dimen/dp_100"
android:layout_marginTop="@dimen/dp_21"
android:layout_marginEnd="@dimen/dp_40"
android:background="@drawable/bg_tab_view_top"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="@dimen/dp_160"
android:layout_height="@dimen/dp_56"
android:layout_marginStart="@dimen/dp_104"
android:layout_marginTop="@dimen/dp_55"
android:text="@string/tab_car_info"
android:textColor="@color/color_CC_FFFFFF"
android:textSize="@dimen/dp_40"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="@dimen/dp_700"
android:layout_marginTop="@dimen/dp_75"
app:layout_constraintTop_toBottomOf="@+id/topViewPos">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_40"
android:layout_marginEnd="@dimen/dp_40">
<ImageView
android:id="@+id/ivCarType"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_280"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tvCarLoginPos"
android:layout_width="@dimen/dp_152"
android:layout_height="@dimen/dp_53"
android:layout_marginStart="@dimen/dp_60"
android:layout_marginTop="@dimen/dp_22"
android:text="@string/tab_car_login_info"
android:textColor="@color/white"
android:textSize="@dimen/dp_38"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ivCarType" />
<TextView
android:id="@+id/tvCarLoginInfo"
android:layout_width="@dimen/dp_185"
android:layout_height="@dimen/dp_45"
android:layout_marginStart="@dimen/dp_16"
android:gravity="center"
android:textColor="@color/white"
android:textSize="@dimen/dp_32"
app:layout_constraintBottom_toBottomOf="@+id/tvCarLoginPos"
app:layout_constraintLeft_toRightOf="@+id/tvCarLoginPos"
app:layout_constraintTop_toTopOf="@+id/tvCarLoginPos" />
<TextView
android:id="@+id/tvCarExit"
android:layout_width="@dimen/dp_64"
android:layout_height="@dimen/dp_45"
android:layout_marginEnd="@dimen/dp_60"
android:gravity="center"
android:text="@string/tab_car_exit"
android:textColor="@color/color_FF1943"
android:textSize="@dimen/dp_32"
app:layout_constraintBottom_toBottomOf="@+id/tvCarLoginInfo"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/tvCarLoginInfo" />
<TextView
android:id="@+id/tvCarNoPos"
android:layout_width="@dimen/dp_152"
android:layout_height="@dimen/dp_53"
android:layout_marginStart="@dimen/dp_60"
android:layout_marginTop="@dimen/dp_49"
android:text="@string/tab_car_no"
android:textColor="@color/white"
android:textSize="@dimen/dp_38"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvCarLoginPos" />
<TextView
android:id="@+id/tvCarNo"
android:layout_width="@dimen/dp_185"
android:layout_height="@dimen/dp_72"
android:layout_marginStart="@dimen/dp_16"
android:background="@drawable/bg_tab_car_no"
android:textColor="@color/white"
android:textSize="@dimen/dp_32"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/tvCarNoPos"
app:layout_constraintLeft_toRightOf="@+id/tvCarNoPos"
app:layout_constraintTop_toTopOf="@+id/tvCarNoPos" />
<TextView
android:id="@+id/tvVersionPos"
android:layout_width="@dimen/dp_152"
android:layout_height="@dimen/dp_53"
android:layout_marginStart="@dimen/dp_60"
android:layout_marginTop="@dimen/dp_68"
android:text="@string/tab_version_info"
android:textColor="@color/white"
android:textSize="@dimen/dp_38"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvCarNoPos" />
<TextView
android:id="@+id/tvPadVersion"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_45"
android:layout_marginStart="@dimen/dp_16"
android:gravity="center"
android:text="@string/tab_version_pad_info"
android:textColor="@color/white"
android:textSize="@dimen/dp_32"
app:layout_constraintBottom_toBottomOf="@+id/tvVersionPos"
app:layout_constraintLeft_toRightOf="@+id/tvVersionPos"
app:layout_constraintTop_toTopOf="@+id/tvVersionPos" />
<TextView
android:id="@+id/tvPADUpdate"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_45"
android:text="@string/tab_version_update"
android:textColor="@color/color_2EACFF"
android:textSize="@dimen/dp_32"
app:layout_constraintBottom_toBottomOf="@+id/tvPadVersion"
app:layout_constraintRight_toRightOf="@+id/tvCarExit"
app:layout_constraintTop_toTopOf="@+id/tvPadVersion" />
<TextView
android:id="@+id/tvADVersion"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_45"
android:layout_marginTop="@dimen/dp_20"
android:gravity="center"
android:text="@string/tab_version_ad_info"
android:textColor="@color/white"
android:textSize="@dimen/dp_32"
app:layout_constraintLeft_toLeftOf="@+id/tvPadVersion"
app:layout_constraintTop_toBottomOf="@+id/tvPadVersion" />
<TextView
android:id="@+id/tvADUpdate"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_45"
android:text="@string/tab_version_update"
android:textColor="@color/color_2EACFF"
android:textSize="@dimen/dp_32"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/tvADVersion"
app:layout_constraintRight_toRightOf="@+id/tvCarExit"
app:layout_constraintTop_toTopOf="@+id/tvADVersion" />
<TextView
android:id="@+id/tvHDMapVersion"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_45"
android:layout_marginTop="@dimen/dp_20"
android:gravity="center"
android:text="@string/tab_version_hdmap_info"
android:textColor="@color/white"
android:textSize="@dimen/dp_32"
app:layout_constraintLeft_toLeftOf="@+id/tvADVersion"
app:layout_constraintTop_toBottomOf="@+id/tvADVersion" />
<TextView
android:id="@+id/tvHDMapUpdate"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_45"
android:text="@string/tab_version_update"
android:textColor="@color/color_2EACFF"
android:textSize="@dimen/dp_32"
app:layout_constraintBottom_toBottomOf="@+id/tvHDMapVersion"
app:layout_constraintRight_toRightOf="@+id/tvCarExit"
app:layout_constraintTop_toTopOf="@+id/tvHDMapVersion" />
<TextView
android:id="@+id/tvADMapVersion"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_45"
android:layout_marginTop="@dimen/dp_20"
android:gravity="center"
android:text="@string/tab_version_admap_info"
android:textColor="@color/white"
android:textSize="@dimen/dp_32"
app:layout_constraintLeft_toLeftOf="@+id/tvHDMapVersion"
app:layout_constraintTop_toBottomOf="@+id/tvHDMapVersion" />
<TextView
android:id="@+id/tvSnPos"
android:layout_width="@dimen/dp_152"
android:layout_height="@dimen/dp_53"
android:layout_marginStart="@dimen/dp_60"
android:layout_marginTop="@dimen/dp_232"
android:text="@string/tab_sn"
android:textColor="@color/white"
android:textSize="@dimen/dp_38"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvVersionPos" />
<TextView
android:id="@+id/tvSnInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:textColor="@color/white"
android:textSize="@dimen/dp_32"
app:layout_constraintBottom_toBottomOf="@+id/tvSnPos"
app:layout_constraintLeft_toRightOf="@+id/tvSnPos"
app:layout_constraintTop_toTopOf="@+id/tvSnPos" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,67 @@
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="@dimen/dp_865"
android:layout_height="@dimen/dp_102">
<ImageView
android:id="@+id/fSMStatusLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@drawable/icon_fsm_status_bg_normal"
tools:visibility="visible"/>
<LinearLayout
android:id="@+id/withoutFSMStatusLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="@dimen/dp_34"
android:gravity="center_vertical"
android:visibility="gone"
tools:visibility="gone"
tools:background="@drawable/icon_no_fsm_status_bg_error">
<TextView
android:id="@+id/tv_gear"
android:layout_width="@dimen/dp_55"
android:layout_height="@dimen/dp_55"
android:gravity="center"
android:maxLines="1"
android:text="P"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_36"
android:layout_marginEnd="@dimen/dp_22"
android:background="@drawable/bg_autopilot_status_gear"
tools:text="P" />
<ImageView
android:id="@+id/iv_steer"
android:layout_width="@dimen/dp_55"
android:layout_height="@dimen/dp_55"
android:layout_marginEnd="@dimen/dp_22"
android:src="@drawable/bg_autopilot_status_steer" />
<ImageView
android:id="@+id/iv_accelerator"
android:layout_width="@dimen/dp_55"
android:layout_height="@dimen/dp_55"
android:layout_marginEnd="@dimen/dp_22"
android:src="@drawable/bg_autopilot_status_accelerator" />
<ImageView
android:id="@+id/iv_brake"
android:layout_width="@dimen/dp_55"
android:layout_height="@dimen/dp_55"
android:layout_marginEnd="@dimen/dp_22"
android:src="@drawable/bg_autopilot_status_brake" />
<ImageView
android:id="@+id/iv_double_flash"
android:layout_width="@dimen/dp_55"
android:layout_height="@dimen/dp_55"
android:src="@drawable/bg_autopilot_status_double_flash" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,48 @@
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="@dimen/dp_220"
android:layout_height="@dimen/dp_140">
<ImageView
android:id="@+id/ivTabDefault"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/ivTabClick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:scaleType="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/ivTabClickBg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
tools:ignore="ContentDescription" />
<View
android:id="@+id/vTabNotice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -152,4 +152,10 @@
</attr>
</declare-styleable>
<declare-styleable name="TabSwitch" >
<attr name="defaultRes" format="reference"/>
<attr name="clickRes" format="reference"/>
<attr name="clickBgRes" format="reference"/>
</declare-styleable>
</resources>

View File

@@ -16,7 +16,9 @@
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>
<color name="color_000000">#000000</color>
<color name="color_B3_000000">#B3000000</color>
<color name="color_8F0005">#8F0005</color>
<color name="color_2EACFF">#2EACFF</color>
<color name="color_FF0006">#FF0006</color>
<color name="color_0099dd">#0099dd</color>
<color name="color_FFFFFF">#FFFFFF</color>
@@ -27,6 +29,7 @@
<color name="color_252B3F">#252B3F</color>
<color name="color_131415">#131415</color>
<color name="color_B2BED9">#B2BED9</color>
<color name="color_FF1943">#FF1943</color>
<color name="color_27FFFFFF">#27FFFFFF</color>
<color name="color_1E111111">#1E111111</color>
<color name="color_FF213757">#FF213757</color>
@@ -47,6 +50,7 @@
<color name="foreground_info">#FF333333</color>
<color name="foreground_warn">#FFCCCCCC</color>
<color name="color_80FFFFFF">#80FFFFFF</color>
<color name="color_CC_FFFFFF">#CCFFFFFF</color>

View File

@@ -2,6 +2,18 @@
<string name="app_name">mogo-core-function-hmi</string>
<string name="motice_push_check">查看</string>
<string name="tab_car_info">我的车辆</string>
<string name="tab_car_login_info">登陆信息</string>
<string name="tab_car_exit">退出</string>
<string name="tab_car_no">车辆绑定</string>
<string name="tab_version_info">版本信息</string>
<string name="tab_sn">设备SN</string>
<string name="tab_version_pad_info">PAD</string>
<string name="tab_version_ad_info">AD</string>
<string name="tab_version_hdmap_info">HDMAP</string>
<string name="tab_version_admap_info">ADMAP</string>
<string name="tab_version_update">检查更新</string>
<string name="log_min">最小化</string>
<string name="log_info">日志</string>
<string name="log_info_edt_hint">输入想要过滤的关键字</string>

View File

@@ -148,17 +148,20 @@ class HttpDnsStartUp : AndroidStartup<Boolean>(), IMoGoCloudListener {
} else {
clientConfig.serviceAppId = "com.mogo.launcher"
}
// 设置AI云平台分配给三方应用的签名密钥需要从AI云平台申请
// 设置AI云平台分配给三方应用的签名密钥需要从AI云平台申请ert
// 设置车机设备的唯一标识(这些表识必须是通过后台录入的设备)
// TODO 现在这块逻辑因为网约车业务那后台的限制,还没有更换,条件成熟后替换为 DeviceIdUtils.getWidevineIDWithMd5(context)
// 这里影响当前Activity的身份信息多进程先保持与原来一样主进程为司机端:passenger 进程为乘客端
if (ProcessUtils.getCurrentProcessName().contains(":passenger")) {
if (ProcessUtils.getCurrentProcessName().contains("passenger")) {
clientConfig.thirdPartyDeviceId = DeviceUtils.getDeviceSN() + "_passenger"
CallerLogger.i("$M_MAIN$TAG", "emArrow passenger sn : ${DeviceUtils.getDeviceSN()} + _passenger")
clientConfig.secretKey = "DLtjkFhV1lEZqLRnUs6OCFS0luP8S0mG"
} else {
clientConfig.thirdPartyDeviceId = DeviceUtils.getDeviceSN()
//设置长链接的secretKey 通过SHA1和包名找中台服务生成后续包名分渠道,需要做对应操作
CallerLogger.i("$M_MAIN$TAG", "emArrow sn : ${DeviceUtils.getDeviceSN()}")
clientConfig.secretKey = "YMj2VFDFxJ3Q4gNoZceJ"
}
//设置长链接的secretKey 通过SHA1和包名找中台服务生成后续包名分渠道,需要做对应操作
clientConfig.secretKey = "YMj2VFDFxJ3Q4gNoZceJ"
// clientConfig.secretKey = "n48AlVufihvMDWgzwHX42yzSgiWaad6v"
clientConfig.iHttpCurrentLocation = object : ICurrentLocation {

View File

@@ -67,6 +67,7 @@ class ChainConstant {
const val CHAIN_CODE_ADAS_P_OBJECTS = "CHAIN_CODE_ADAS_P_OBJECTS"
const val CHAIN_CODE_ADAS_P_ACTIONS = "CHAIN_CODE_ADAS_P_ACTIONS"
const val CHAIN_CODE_ADAS_STATUS_QUERY_RESP = "CHAIN_CODE_ADAS_STATUS_QUERY_RESP"
const val CHAIN_CODE_ADAS_SYSTEM_STATUS = "CHAIN_CODE_ADAS_SYSTEM_STATUS"
const val CHAIN_CODE_ADAS_PARALLEL = "CHAIN_CODE_ADAS_PARALLEL"
const val CHAIN_CODE_ADAS_MAP_PARAM = "CHAIN_CODE_ADAS_MAP_PARAM"
const val CHAIN_CODE_ADAS_V2N_EVENT = "CHAIN_CODE_ADAS_V2N_EVENT"

View File

@@ -1028,18 +1028,24 @@
<dimen name="dp_1000">1000dp</dimen>
<dimen name="dp_1003">1003dp</dimen>
<dimen name="dp_1017">1017dp</dimen>
<dimen name="dp_1046">1046dp</dimen>
<dimen name="dp_1055">1055dp</dimen>
<dimen name="dp_1090">1090dp</dimen>
<dimen name="dp_1092">1092dp</dimen>
<dimen name="dp_1100">1100dp</dimen>
<dimen name="dp_1114">1114dp</dimen>
<dimen name="dp_1125">1125dp</dimen>
<dimen name="dp_1128">1128dp</dimen>
<dimen name="dp_1137">1137dp</dimen>
<dimen name="dp_1158">1158dp</dimen>
<dimen name="dp_1170">1170dp</dimen>
<dimen name="dp_1200">1200dp</dimen>
<dimen name="dp_1241">1241dp</dimen>
<dimen name="dp_1250">1250dp</dimen>
<dimen name="dp_1261">1261dp</dimen>
<dimen name="dp_1300">1300dp</dimen>
<dimen name="dp_1373">1373dp</dimen>
<dimen name="dp_1386">1386dp</dimen>
<dimen name="dp_1600">1600dp</dimen>
<dimen name="dp_1860">1860dp</dimen>
<dimen name="dp_1920">1920dp</dimen>

View File

@@ -81,7 +81,7 @@ MOGO_LOCATION_VERSION=1.4.7.38
MOGO_TELEMATIC_VERSION=1.4.7.38
######## MogoAiCloudSDK Version ########
# 自研地图
MAP_SDK_VERSION=3.4.0.6
MAP_SDK_VERSION=3.4.1.2
MAP_SDK_DATA_VERSION=1.0.0.9
MAP_SDK_OPERATION_VERSION=1.1.4.1
# websocket

View File

@@ -65,7 +65,7 @@ dependencies {
implementation 'com.zhidaoauto.map:net:1.0.1'
implementation "com.zhidaoauto.machine:mapcore:3.4.1.2"
implementation "com.zhidaoauto.machine:mapcore:${MAP_SDK_VERSION}"
implementation "com.zhidaoauto.machine:mapdata:${MAP_SDK_DATA_VERSION}"
}