Merge branch 'dev_robotaxi-d-app-module_2110_220915_2.11.0' into dev_robotaxi-d-app-module_2110_yangyakun_2.11.0

# Conflicts:
#	OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java
#	OCH/mogo-och-bus/src/main/res/values/colors.xml
#	OCH/mogo-och-common-module/src/main/res/values/colors.xml
#	OCH/mogo-och-common-module/src/main/res/values/styles.xml
This commit is contained in:
yangyakun
2022-09-21 18:07:18 +08:00
147 changed files with 3229 additions and 1512 deletions

View File

@@ -20,15 +20,22 @@ import androidx.core.view.*
import androidx.lifecycle.lifecycleScope
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.kwai.koom.base.postOnMainThread
import com.mogo.cloud.passport.MoGoAiCloudClient
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.debug.DebugConfig
import com.mogo.commons.mvp.BaseFragment
import com.mogo.commons.mvp.MvpFragment
import com.mogo.commons.voice.*
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.bindingcar.AdUpgradeStateHelper
import com.mogo.eagle.core.data.bindingcar.IPCUpgradeStateInfo
import com.mogo.eagle.core.data.camera.CameraEntity
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.config.HmiBuildConfig
import com.mogo.eagle.core.data.constants.MoGoFragmentPaths
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RTS
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2I
import com.mogo.eagle.core.data.enums.SidePattern
import com.mogo.eagle.core.data.enums.SidePattern.*
import com.mogo.eagle.core.data.enums.WarningDirectionEnum
@@ -46,6 +53,7 @@ import com.mogo.eagle.core.function.api.hmi.view.IViewNotification
import com.mogo.eagle.core.function.api.hmi.view.IViewTrafficLight
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager
import com.mogo.eagle.core.function.call.bindingcar.CallerBindingcarManager
@@ -54,6 +62,7 @@ import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.call.monitor.CallerMonitorManager
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.WaringConst
import com.mogo.eagle.core.function.hmi.notification.WarningFloat
@@ -81,13 +90,13 @@ import com.mogo.eagle.core.utilcode.reminder.*
import com.mogo.eagle.core.utilcode.reminder.api.*
import com.mogo.eagle.core.utilcode.reminder.api.IReminder.IStateChangeListener
import com.mogo.eagle.core.utilcode.reminder.api.impl.*
import com.mogo.eagle.core.utilcode.util.SoundUtils
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils
import com.mogo.eagle.core.utilcode.util.*
import com.mogo.eagle.core.utilcode.util.TimeUtils.millis2String
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.map.MogoMap
import com.mogo.module.common.enums.*
import com.zhidao.support.adas.high.common.MogoReport.Code.Error.EMAP.*
import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
import com.zhjt.service_biz.BizConfig
import kotlinx.android.synthetic.main.fragment_hmi.*
import kotlinx.android.synthetic.main.view_auto_pilot_check.view.*
import kotlinx.android.synthetic.main.view_och_bus_operation.view.*
@@ -104,12 +113,12 @@ import java.util.*
* 预警图层
*/
@Route(path = MoGoFragmentPaths.PATH_FRAGMENT_HMI)
class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
IMoGoWaringProvider,
IMoGoHmiViewProxy,
MoGoHmiContract.View,
IMoGoAutopilotRecordListener,
IMoGoAutopilotStatusListener, IViewNotificationProvider {
class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
IMoGoWaringProvider,
IMoGoHmiViewProxy,
MoGoHmiContract.View,
IMoGoAutopilotRecordListener,
IMoGoAutopilotStatusListener, IViewNotificationProvider {
private val TAG = "MoGoHmiFragment"
// DebugSettingView
@@ -145,11 +154,12 @@ import java.util.*
//工控机节点上报列表
private var reportList = arrayListOf<ReportEntity>()
//工控机上报列表悬浮窗
private var reportListFloatWindow: ReportListFloatWindow?=null
private var ipcReportWindow: IPCReportWindow?=null
private var adUpgradeDialog: AdUpgradeDialog?=null
//工控机上报列表悬浮窗
private var reportListFloatWindow: ReportListFloatWindow? = null
private var ipcReportWindow: IPCReportWindow? = null
private var adUpgradeDialog: AdUpgradeDialog? = null
private var lastSpeakJob: Job? = null
@@ -183,8 +193,8 @@ import java.util.*
}
/**ivCameraIcon?.setOnLongClickListener {
activity?.let { it1 -> CarcorderPreviewView.show(it1) }
true
activity?.let { it1 -> CarcorderPreviewView.show(it1) }
true
}*/
ivToolsIcon?.setOnClickListener {
@@ -198,7 +208,50 @@ import java.util.*
true
}
// init appConfigInfo
AppConfigInfo.appName = AppUtils.getAppName()
if (AppConfigInfo.appVersionCode == 0) {
AppConfigInfo.appVersionCode = AppUtils.getAppVersionCode()
}
if (AppConfigInfo.appVersionName.isNullOrEmpty()) {
AppConfigInfo.appVersionName = AppUtils.getAppVersionName()
}
if (AppConfigInfo.appPackageName.isNullOrEmpty()) {
AppConfigInfo.appPackageName = AppUtils.getAppPackageName()
}
if (AppConfigInfo.uniqueDeviceId.isNullOrEmpty()) {
AppConfigInfo.uniqueDeviceId = DeviceIdUtils.getDeviceId(AbsMogoApplication.getApp())
}
if (AppConfigInfo.widevineIDMd5.isNullOrEmpty()) {
AppConfigInfo.widevineIDMd5 =
DeviceIdUtils.getWidevineIDWithMd5(AbsMogoApplication.getApp())
}
if (MoGoAiCloudClient.getInstance().aiCloudClientConfig != null) {
AppConfigInfo.mogoSN = MoGoAiCloudClient.getInstance().aiCloudClientConfig.sn
AppConfigInfo.mogoToken = MoGoAiCloudClient.getInstance().aiCloudClientConfig.token
}
AppConfigInfo.netMode = DebugConfig.getNetMode()
if (MogoMap.getInstance().mogoMap != null) {
AppConfigInfo.mapSdkVersion = MogoMap.getInstance().mogoMap.mapVersion
}
AppConfigInfo.isConnectNet = NetworkUtils.isConnected(context)
AppConfigInfo.isConnectSocket = DebugConfig.isDownloadSnapshot()
when {
AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) -> {// 司机端
AppConfigInfo.isDriver = true
AppConfigInfo.isConnectedNetty = CallerTelematicManager.getServerStarted()
}
AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) -> {
AppConfigInfo.isDriver = false
AppConfigInfo.isConnectedNetty = CallerTelematicManager.getClientConnStatus()
AppConfigInfo.serverSn = CallerTelematicManager.getServerToken()
}
else -> {
}
}
AppConfigInfo.teleTimeStamp = CallerAutoPilotManager.getTeleTimeStamp()
}
@OptIn(ExperimentalCoroutinesApi::class)
@@ -221,45 +274,62 @@ import java.util.*
}
}
override fun getNotificationView(): IViewNotification? = context?.let { V2XNotificationView(it) }
override fun getNotificationView(): IViewNotification? =
context?.let { V2XNotificationView(it) }
override fun onAutopilotRecordResult(recordPanel: RecordPanelOuterClass.RecordPanel) {
CallerLogger.d("$M_HMI$TAG", "recordKey=${recordPanel.key},stat=${recordPanel.stat}")
if(BadCaseConfig.recordKeyList.contains(recordPanel.key)){
if(recordPanel.stat == 100 || recordPanel.stat == 101){
if (BadCaseConfig.recordKeyList.contains(recordPanel.key)) {
if (recordPanel.stat == 100 || recordPanel.stat == 101) {
//成功结束录制
TipToast.shortTip("${millis2String(System.currentTimeMillis(),TimeUtils.getHourMinSecondFormat())} bag录制成功")
TipToast.shortTip(
"${
millis2String(
System.currentTimeMillis(),
TimeUtils.getHourMinSecondFormat()
)
} bag录制成功"
)
}
if(recordPanel.stat == 200){
if (recordPanel.stat == 200) {
//录制失败
TipToast.shortTip("${millis2String(System.currentTimeMillis(),TimeUtils.getHourMinSecondFormat())} bag录制失败")
TipToast.shortTip(
"${
millis2String(
System.currentTimeMillis(),
TimeUtils.getHourMinSecondFormat()
)
} bag录制失败"
)
}
return
}
//在工控机taxi2.3.0版本和Bus2.4.0版本上不支持被动录包,不进行被动录包的弹窗
BadCaseConfig.dockerVersion?.let {
if(it.contains("taxi") && it.contains("2.3.0")){
if (it.contains("taxi") && it.contains("2.3.0")) {
return
}
if(it.contains("bus") && it.contains("2.4.0")){
if (it.contains("bus") && it.contains("2.4.0")) {
return
}
}
//处于非美化模式下弹窗是地图数据采集任务时即type=2时不弹窗
if (!FunctionBuildConfig.isDemoMode && (recordPanel.stat == 100 || recordPanel.stat == 101) && recordPanel.type!=2) {
if (!FunctionBuildConfig.isDemoMode && (recordPanel.stat == 100 || recordPanel.stat == 101) && recordPanel.type != 2) {
//只在司机屏生效,乘客屏不生效
if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
activity?.let { CallerDevaToolsManager.onReceiveBadCaseRecord(recordPanel, it) }
}
}
if (!FunctionBuildConfig.isDemoMode && recordPanel.type == 2 && (
recordPanel.stat == 101 || //工控机采集完成-被动完成
recordPanel.stat == 100 || //工控机采集完成-主动完成
recordPanel.stat == 102 || //工控机达到最大采集时长
recordPanel.stat == 103) //工控机磁盘满了
recordPanel.stat == 101 || //工控机采集完成-被动完成
recordPanel.stat == 100 || //工控机采集完成-主动完成
recordPanel.stat == 102 || //工控机达到最大采集时长
recordPanel.stat == 103) //工控机磁盘满了
) {
CallerMapDataCollectorManager.finish(recordPanel.id, recordPanel.stat, "", recordPanel.filename
?: "", recordPanel.note ?: "")
CallerMapDataCollectorManager.finish(
recordPanel.id, recordPanel.stat, "", recordPanel.filename
?: "", recordPanel.note ?: ""
)
}
}
@@ -303,15 +373,19 @@ import java.util.*
* @param warningReportList 提醒级别上报数据列表
* @param reportLevel 1:error级别 2:warning级别
*/
override fun showIPCReportWindow(errorReportList: ArrayList<ReportEntity>,warningReportList: ArrayList<ReportEntity>,reportLevel: Int) {
ThreadUtils.runOnUiThread{
if(reportLevel == 1){
if(ipcReportWindow==null){
ipcReportWindow= activity?.let { IPCReportWindow(it) }
ipcReportWindow?.setClickListener(object: IPCReportWindow.ClickListener{
override fun showIPCReportWindow(
errorReportList: ArrayList<ReportEntity>,
warningReportList: ArrayList<ReportEntity>,
reportLevel: Int
) {
ThreadUtils.runOnUiThread {
if (reportLevel == 1) {
if (ipcReportWindow == null) {
ipcReportWindow = activity?.let { IPCReportWindow(it) }
ipcReportWindow?.setClickListener(object : IPCReportWindow.ClickListener {
override fun closeWindow() {
ipcReportWindow?.hideFloatWindow()
ipcReportWindow =null
ipcReportWindow = null
}
})
ipcReportWindow?.let {
@@ -320,7 +394,7 @@ import java.util.*
}
ipcReportWindow?.showFloatWindow()
}
ipcReportWindow?.refreshData(errorReportList,warningReportList,reportLevel)
ipcReportWindow?.refreshData(errorReportList, warningReportList, reportLevel)
}
}
@@ -328,14 +402,6 @@ import java.util.*
mViewNotificationProvider = provider
}
override fun showVideoDialog(infList: List<Infrastructure>) {
context?.let {
if (roadVideoDialog == null) {
roadVideoDialog = RoadVideoDialog(it)
}
roadVideoDialog?.show(infList)
}
}
override fun changeBusOperationStatus(isOut: Boolean) {
busOperationStatus?.changerOperationStatus(isOut)
@@ -387,41 +453,41 @@ import java.util.*
})
}
toolsViewFloat = WarningFloat.with(it)
.setTag("ToolsViewFloat")
.setLayout(toolsView!!)
.setSidePattern(SidePattern.LEFT)
.setGravity(Gravity.LEFT)
.setImmersionStatusBar(true)
.setWindowHeight(LayoutParams.MATCH_PARENT)
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.enterAnim(view, params, windowManager, sidePattern)
?.apply {
interpolator = OvershootInterpolator()
}
.setTag("ToolsViewFloat")
.setLayout(toolsView!!)
.setSidePattern(SidePattern.LEFT)
.setGravity(Gravity.LEFT)
.setImmersionStatusBar(true)
.setWindowHeight(LayoutParams.MATCH_PARENT)
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.enterAnim(view, params, windowManager, sidePattern)
?.apply {
interpolator = OvershootInterpolator()
}
override fun exitAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.exitAnim(view, params, windowManager, sidePattern)
?.setDuration(200)
})
.addWarningStatusListener(object : IMoGoWarningStatusListener {
override fun onDismiss() {
toolsViewFloat = null
toolsView = null
// TODO:("")
}
})
.show()
override fun exitAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.exitAnim(view, params, windowManager, sidePattern)
?.setDuration(200)
})
.addWarningStatusListener(object : IMoGoWarningStatusListener {
override fun onDismiss() {
toolsViewFloat = null
toolsView = null
// TODO:("")
}
})
.show()
} else {
toolsViewFloat?.show()
}
@@ -466,7 +532,7 @@ import java.util.*
ivAiCollectTools.visibility = View.VISIBLE
CallerDevaToolsManager.initBadCase(ivBadCaseTools)
CallerDevaToolsManager.initAiCollect(ivAiCollectTools)
}else{
} else {
ivBadCaseTools.visibility = View.GONE
ivAiCollectTools.visibility = View.GONE
}
@@ -543,20 +609,20 @@ import java.util.*
mDebugSettingView = DebugSettingView(it)
Log.i("DebugViewSwitchLog", "new DebugSettingView")
mDebugSettingView?.reportInit(reportList)
mDebugSettingView?.setClickListener(object: DebugSettingView.ClickListener{
mDebugSettingView?.setClickListener(object : DebugSettingView.ClickListener {
override fun showReportListWindow(show: Boolean) {
if(show){
if (show) {
//打开工控机上报列表
reportListFloatWindow = ReportListFloatWindow(it)
reportListFloatWindow?.showFloatWindow()
reportListFloatWindow?.refreshData(reportList)
}else{
} else {
//关闭工控机上报列表
reportListFloatWindow?.hideFloatWindow()
}
}
})
if(mDebugSettingView!=null){
if (mDebugSettingView != null) {
Log.i("DebugViewSwitchLog", "new DebugSettingView success")
}
}
@@ -564,38 +630,39 @@ import java.util.*
var gravity = Gravity.RIGHT
//调试窗默认靠右显示Bus的乘客端右端有视图覆盖调试窗靠左显示
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) &&
AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)
) {
side = SidePattern.LEFT
gravity = Gravity.LEFT
}
mDebugSettingViewFloat = WarningFloat.with(it)
.setTag("DebugSettingView")
.setLayout(mDebugSettingView!!)
.setSidePattern(side)
.setGravity(gravity, offsetY = 70)
.setImmersionStatusBar(true)
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.enterAnim(view, params, windowManager, sidePattern)
?.apply {
interpolator = OvershootInterpolator()
}
.setTag("DebugSettingView")
.setLayout(mDebugSettingView!!)
.setSidePattern(side)
.setGravity(gravity, offsetY = 70)
.setImmersionStatusBar(true)
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.enterAnim(view, params, windowManager, sidePattern)
?.apply {
interpolator = OvershootInterpolator()
}
override fun exitAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.exitAnim(view, params, windowManager, sidePattern)
?.setDuration(200)
})
.show()
override fun exitAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.exitAnim(view, params, windowManager, sidePattern)
?.setDuration(200)
})
.show()
}
}
}
@@ -610,15 +677,16 @@ import java.util.*
*/
@Synchronized
override fun showWarningV2X(
v2xType: String,
alertContent: CharSequence?,
ttsContent: String?,
tag: String?,
listener: IMoGoWarningStatusListener?,
playTts: Boolean,
expireTime: Long
v2xType: String,
alertContent: CharSequence?,
ttsContent: String?,
tag: String?,
listener: IMoGoWarningStatusListener?,
playTts: Boolean,
expireTime: Long
) {
val playTTS = playTts && !AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)
val playTTS =
playTts && !AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)
activity?.let {
val warningContent = alertContent
?: EventTypeEnum.getWarningContent(v2xType)
@@ -629,70 +697,87 @@ import java.util.*
val content = mViewNotificationProvider?.getNotificationView() ?: return
content.setWarningIcon(EventTypeEnum.getWarningIcon(v2xType))
content.setWarningContent(warningContent)
Log.d("$M_HMI$TAG", "--- show v2x dialog 1 ---: info -> v2x-type: $v2xType : expireTime: $expireTime")
Reminder.enqueue(this@MoGoHmiFragment, object : PopupWindowReminder(PopupWindow(content, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT).also { itx ->
itx.isTouchable = false
itx.isFocusable = false
itx.isClippingEnabled = false
itx.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
val transition = Slide(when(content.sidePattern) {
LEFT, RESULT_LEFT-> Gravity.LEFT
RIGHT, RESULT_RIGHT -> Gravity.RIGHT
TOP, RESULT_TOP -> Gravity.TOP
BOTTOM, RESULT_BOTTOM -> Gravity.BOTTOM
else -> Gravity.TOP
}).also { t ->
t.interpolator = AccelerateDecelerateInterpolator()
t.duration = 200
}
if (VERSION.SDK_INT >= VERSION_CODES.M) {
itx.enterTransition = transition
itx.exitTransition = transition
}
}) {
override fun show() {
val parent = it.window.decorView
parent.doOnAttach {
Log.d("$M_HMI$TAG", "--- show v2x dialog 2 ---: info -> v2x-type: $v2xType : expireTime: $expireTime")
popupWindow.showAtLocation(parent, content.layoutGravity, 0, 0)
}
}
override fun isOverride(): Boolean {
return true
}
override fun key(): String {
return v2xType
}
}, object : IStateChangeListener {
override fun onShow(reminder: IReminder) {
listener?.onShow()
lastShowV2XJob?.safeCancel()
lastSpeakJob?.safeCancel()
showingV2XTip = reminder
lifecycleScope.launch {
delay(expireTime)
}.also { itx ->
lastShowV2XJob = itx
}.invokeOnCompletion { _ ->
reminder.hide()
}
if (ttsContent != null && !TextUtils.isEmpty(ttsContent) && playTTS) {
lifecycleScope.launch {
speak(it, ttsContent)
}.also { itx ->
lastSpeakJob = itx
Log.d(
"$M_HMI$TAG",
"--- show v2x dialog 1 ---: info -> v2x-type: $v2xType : expireTime: $expireTime"
)
Reminder.enqueue(
this@MoGoHmiFragment,
object : PopupWindowReminder(
PopupWindow(
content,
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT
).also { itx ->
itx.isTouchable = false
itx.isFocusable = false
itx.isClippingEnabled = false
itx.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
val transition = Slide(
when (content.sidePattern) {
LEFT, RESULT_LEFT -> Gravity.LEFT
RIGHT, RESULT_RIGHT -> Gravity.RIGHT
TOP, RESULT_TOP -> Gravity.TOP
BOTTOM, RESULT_BOTTOM -> Gravity.BOTTOM
else -> Gravity.TOP
}
).also { t ->
t.interpolator = AccelerateDecelerateInterpolator()
t.duration = 200
}
if (VERSION.SDK_INT >= VERSION_CODES.M) {
itx.enterTransition = transition
itx.exitTransition = transition
}
}) {
override fun show() {
val parent = it.window.decorView
parent.doOnAttach {
Log.d(
"$M_HMI$TAG",
"--- show v2x dialog 2 ---: info -> v2x-type: $v2xType : expireTime: $expireTime"
)
popupWindow.showAtLocation(parent, content.layoutGravity, 0, 0)
}
}
}
override fun onHide(reminder: IReminder) {
listener?.onDismiss()
showingV2XTip = null
showWarning(WarningDirectionEnum.ALERT_WARNING_NON)
}
})
override fun isOverride(): Boolean {
return true
}
override fun key(): String {
return v2xType
}
},
object : IStateChangeListener {
override fun onShow(reminder: IReminder) {
listener?.onShow()
lastShowV2XJob?.safeCancel()
lastSpeakJob?.safeCancel()
showingV2XTip = reminder
lifecycleScope.launch {
delay(expireTime)
}.also { itx ->
lastShowV2XJob = itx
}.invokeOnCompletion { _ ->
reminder.hide()
}
if (ttsContent != null && !TextUtils.isEmpty(ttsContent) && playTTS) {
lifecycleScope.launch {
speak(it, ttsContent)
}.also { itx ->
lastSpeakJob = itx
}
}
}
override fun onHide(reminder: IReminder) {
listener?.onDismiss()
showingV2XTip = null
showWarning(WarningDirectionEnum.ALERT_WARNING_NON)
}
})
}
}
@@ -739,8 +824,8 @@ import java.util.*
* @param checkLightId 0-都是默认不亮起1-红2-黄3-绿
* @param lightSource 1:云端下发2:自车感知
*/
override fun showWarningTrafficLight(checkLightId: Int,lightSource: Int) {
mViewTrafficLight?.showWarningTrafficLight(checkLightId,lightSource)
override fun showWarningTrafficLight(checkLightId: Int, lightSource: Int) {
mViewTrafficLight?.showWarningTrafficLight(checkLightId, lightSource)
}
override fun isWarningTrafficLightShow(): Boolean {
@@ -814,7 +899,7 @@ import java.util.*
* @see WarningDirectionEnum
*/
override fun showWarning(direction: WarningDirectionEnum) {
Log.d(TAG,"showWarning====")
Log.d(TAG, "showWarning====")
flV2XWarningView?.showWarning(direction)
flicker(flV2XWarningView)
}
@@ -863,42 +948,42 @@ import java.util.*
mNoticeFloat = it?.let { it1 ->
noticeBannerView?.let { it2 ->
WarningFloat.with(it1)
.setTag(WaringConst.NOTICE_FOR_TRAFFIC_KEY)
.setLayout(it2)
.setSidePattern(SidePattern.TOP)
.setCountDownTime(60 * 1000 * 3)
.setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110)
.setImmersionStatusBar(true)
.addWarningStatusListener(object : IMoGoWarningStatusListener {
override fun onShow() {
// 创建弹窗成功才进行TTS播报
.setTag(WaringConst.NOTICE_FOR_TRAFFIC_KEY)
.setLayout(it2)
.setSidePattern(SidePattern.TOP)
.setCountDownTime(60 * 1000 * 3)
.setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110)
.setImmersionStatusBar(true)
.addWarningStatusListener(object : IMoGoWarningStatusListener {
override fun onShow() {
// 创建弹窗成功才进行TTS播报
// AIAssist.getInstance(activity)
// .speakTTSVoice("")
}
}
})
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.enterAnim(view, params, windowManager, sidePattern)
?.apply {
interpolator = OvershootInterpolator()
}
})
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.enterAnim(view, params, windowManager, sidePattern)
?.apply {
interpolator = OvershootInterpolator()
}
override fun exitAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.exitAnim(view, params, windowManager, sidePattern)
?.setDuration(200)
})
.show()
override fun exitAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.exitAnim(view, params, windowManager, sidePattern)
?.setDuration(200)
})
.show()
}
}
}
@@ -913,41 +998,41 @@ import java.util.*
mNoticeFloat = it.let { it1 ->
noticeBannerView?.let { it2 ->
WarningFloat.with(it1)
.setTag(WaringConst.NOTICE_FOR_NORMAL_KEY)
.setLayout(it2)
.setSidePattern(SidePattern.TOP)
.setCountDownTime(10000)
.setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110)
.setImmersionStatusBar(true)
.addWarningStatusListener(object : IMoGoWarningStatusListener {
override fun onShow() {
// 创建弹窗成功才进行TTS播报
// AIAssist.getInstance(activity)
// .speakTTSVoice("")
}
})
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.enterAnim(view, params, windowManager, sidePattern)
?.apply {
interpolator = OvershootInterpolator()
}
.setTag(WaringConst.NOTICE_FOR_NORMAL_KEY)
.setLayout(it2)
.setSidePattern(SidePattern.TOP)
.setCountDownTime(10000)
.setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110)
.setImmersionStatusBar(true)
.addWarningStatusListener(object : IMoGoWarningStatusListener {
override fun onShow() {
// 创建弹窗成功才进行TTS播报
// AIAssist.getInstance(activity)
// .speakTTSVoice("")
}
})
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.enterAnim(view, params, windowManager, sidePattern)
?.apply {
interpolator = OvershootInterpolator()
}
override fun exitAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.exitAnim(view, params, windowManager, sidePattern)
?.setDuration(200)
})
.show()
override fun exitAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.exitAnim(view, params, windowManager, sidePattern)
?.setDuration(200)
})
.show()
}
}
}
@@ -1034,6 +1119,17 @@ import java.util.*
dismissToolsFloatView()
}
@BizConfig(V2I, "", BIZ_RTS)
override fun showVideoDialog(infList: List<Infrastructure>) {
context?.let {
if (roadVideoDialog == null) {
roadVideoDialog = RoadVideoDialog(it)
}
roadVideoDialog?.show(infList)
}
}
@BizConfig(V2I, "", BIZ_RTS)
private fun showCameraList(cameraList: List<CameraEntity>?) {
context?.let {
if (cameraViewFloat == null) {
@@ -1062,40 +1158,40 @@ import java.util.*
}
})
cameraViewFloat = WarningFloat.with(it)
.setTag("CameraListFloat")
.setLayout(cameraListView!!)
.setSidePattern(SidePattern.RIGHT)
.setGravity(Gravity.RIGHT, -40, 255)
.setImmersionStatusBar(true)
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.enterAnim(view, params, windowManager, sidePattern)
?.apply {
interpolator = OvershootInterpolator()
}
.setTag("CameraListFloat")
.setLayout(cameraListView!!)
.setSidePattern(SidePattern.RIGHT)
.setGravity(Gravity.RIGHT, -40, 255)
.setImmersionStatusBar(true)
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.enterAnim(view, params, windowManager, sidePattern)
?.apply {
interpolator = OvershootInterpolator()
}
override fun exitAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.exitAnim(view, params, windowManager, sidePattern)
?.setDuration(200)
})
.addWarningStatusListener(object : IMoGoWarningStatusListener {
override fun onDismiss() {
cameraViewFloat = null
cameraListView = null
ivCameraIcon.setBackgroundResource(R.drawable.icon_camera_nor)
}
})
.show()
override fun exitAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.exitAnim(view, params, windowManager, sidePattern)
?.setDuration(200)
})
.addWarningStatusListener(object : IMoGoWarningStatusListener {
override fun onDismiss() {
cameraViewFloat = null
cameraListView = null
ivCameraIcon.setBackgroundResource(R.drawable.icon_camera_nor)
}
})
.show()
} else {
cameraViewFloat?.show()
}
@@ -1126,9 +1222,9 @@ import java.util.*
}
}
private var isLeftLight :Boolean = false
private var isRightLight :Boolean = false
private var isDisappare :Boolean = false
private var isLeftLight: Boolean = false
private var isRightLight: Boolean = false
private var isDisappare: Boolean = false
/**
* 显示转向灯效果 if (HmiBuildConfig.isShowBadCaseView) {
@@ -1233,13 +1329,14 @@ import java.util.*
padSn: String,
releaseId: String
) {
ThreadUtils.runOnUiThread{
if(adUpgradeDialog == null){
adUpgradeDialog = AdUpgradeDialog(requireContext(),images, padSn, releaseId)
adUpgradeDialog?.setClickListener(object: AdUpgradeDialog.ClickListener{
ThreadUtils.runOnUiThread {
if (adUpgradeDialog == null) {
adUpgradeDialog = AdUpgradeDialog(requireContext(), images, padSn, releaseId)
adUpgradeDialog?.setClickListener(object : AdUpgradeDialog.ClickListener {
override fun confirm() {
//确认升级
CallerBindingcarManager.getBindingcarProvider().upgradeConfirm(images, padSn, releaseId)
CallerBindingcarManager.getBindingcarProvider()
.upgradeConfirm(images, padSn, releaseId)
AdUpgradeStateHelper.setConfirmUpgrade(true)
ToastUtils.showLong("最新版本下载中...")
adUpgradeDialog?.dismiss()
@@ -1258,10 +1355,10 @@ import java.util.*
}
override fun showAdUpgradeStatus(ipcUpgradeStateInfo: IPCUpgradeStateInfo) {
ThreadUtils.runOnUiThread{
ThreadUtils.runOnUiThread {
toolsView?.showAdUpgradeStatus(ipcUpgradeStateInfo)
ipcUpgradeStateInfo.status.let {
if(AdUpgradeStateHelper.isUpgradeSuccess(it)){
if (AdUpgradeStateHelper.isUpgradeSuccess(it)) {
ToastUtils.showLong("升级成功")
AdUpgradeStateHelper.setConfirmUpgrade(false)
}
@@ -1287,17 +1384,45 @@ import java.util.*
* 工控机监控节点上报
*/
override fun onAutopilotGuardian(guardianInfo: MogoReportMsg.MogoReportMessage?) {
guardianInfo?.let {
if(reportList.size>49){
reportList.removeLast()
}
reportList.add(0,
ReportEntity(TimeUtils.millis2String(System.currentTimeMillis()),
it.src,it.level,it.msg,it.code,it.resultList,it.actionsList))
}
reportListFloatWindow?.let {
ThreadUtils.runOnUiThread{
it.refreshData(reportList)
ThreadUtils.runOnUiThread {
guardianInfo?.let {
when (it.code) {
EXIT_AUTOPILOT_FOR_PLANNING,
EXIT_AUTOPILOT_FOR_LOCATION,
EXIT_AUTOPILOT_FOR_CHASSIS,
EXIT_AUTOPILOT_FOR_DISTANCE -> {
showWarningV2X(
EventTypeEnum.TAKE_OVER_EVENT.poiType,
EventTypeEnum.TAKE_OVER_EVENT.content,
EventTypeEnum.TAKE_OVER_EVENT.tts,
EventTypeEnum.TAKE_OVER_EVENT.poiType,
object : IMoGoWarningStatusListener {
override fun onShow() {
clTakeOverView.visibility = View.VISIBLE
}
override fun onDismiss() {
clTakeOverView.visibility = View.GONE
}
},
true,
6000L
)
}
}
if (reportList.size > 49) {
reportList.removeLast()
}
reportList.add(
0,
ReportEntity(
TimeUtils.millis2String(System.currentTimeMillis()),
it.src, it.level, it.msg, it.code, it.resultList, it.actionsList
)
)
reportListFloatWindow?.refreshData(reportList)
}
}
}
@@ -1308,12 +1433,16 @@ import java.util.*
.navigation() as BaseFragment
activity?.supportFragmentManager?.beginTransaction()
?.setCustomAnimations(R.anim.slide_in, R.anim.fade_out)?.apply {
if (!fragmentOverview.isAdded) {
add(R.id.module_main_id_smp_fragment, fragmentOverview, fragmentOverview.tagName)
} else {
if (!fragmentOverview.isAdded) {
add(
R.id.module_main_id_smp_fragment,
fragmentOverview,
fragmentOverview.tagName
)
} else {
show(fragmentOverview)
}.commitAllowingStateLoss()
}
}.commitAllowingStateLoss()
}
CallerDevaToolsManager.hideStatusBar()
}

View File

@@ -27,6 +27,11 @@ import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.autopilot.*
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.constants.MoGoConfig
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BAG_RECORD
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BEAUTY_MODE
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RAIN_MODE
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_WARNING_UPLOAD
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.data.deva.scene.SceneModule
import com.mogo.eagle.core.data.enums.TrafficTypeEnum
@@ -36,10 +41,12 @@ import com.mogo.eagle.core.data.obu.ObuStatusInfo
import com.mogo.eagle.core.data.report.ReportEntity
import com.mogo.eagle.core.data.upgrade.UpgradeVersionEntity
import com.mogo.eagle.core.function.api.autopilot.*
import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsFuncConfigListener
import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener
import com.mogo.eagle.core.function.api.map.listener.IMoGoMapLocationListener
import com.mogo.eagle.core.function.api.obu.IMoGoObuStatusListener
import com.mogo.eagle.core.function.call.autopilot.*
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsFuncConfigListenerManager
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.CallerHmiManager
@@ -93,8 +100,8 @@ class DebugSettingView @JvmOverloads constructor(
) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoObuStatusListener,
IMoGoAutopilotStatusListener, IMoGoAutopilotCarStateListener,
IMoGoMapLocationListener, IMoGoAutopilotIdentifyListener,
IMoGoAutopilotPlanningListener, IMoGoAutopilotCarConfigListener,
IMoGoAutopilotVehicleStateListener {
IMoGoAutopilotPlanningListener,
IMoGoAutopilotVehicleStateListener, IMoGoDevaToolsFuncConfigListener {
private val TAG = "DebugSettingView"
@@ -185,10 +192,16 @@ class DebugSettingView @JvmOverloads constructor(
CallerAutopilotIdentifyListenerManager.addListener(TAG, this)
// 添加 规划路径相关回调 监听
CallerAutopilotPlanningListenerManager.addListener(TAG, this)
// 添加 工控机基础信息回调 监听
CallerAutopilotCarConfigListenerManager.addListener(TAG, this)
//添加 车辆底盘数据回调 监听
CallerAutopilotVehicleStateListenerManager.addListener(TAG, this)
//添加 业务配置监听
CallerDevaToolsFuncConfigListenerManager.registerDevaToolsFuncConfigListener(
FuncBizConfig.FOUNDATION,
TAG,
this
)
if (logInfoView != null) {
logInfoView!!.onEnterForeground()
}
@@ -214,11 +227,12 @@ class DebugSettingView @JvmOverloads constructor(
CallerAutopilotIdentifyListenerManager.removeListener(TAG)
// 移除 规划路径相关回调 监听
CallerAutopilotPlanningListenerManager.removeListener(TAG)
// 移除 工控机基础信息回调 监听
CallerAutopilotCarConfigListenerManager.removeListener(TAG)
//移除 车辆底盘数据回调 监听
// 移除 车辆底盘数据回调 监听
CallerAutopilotVehicleStateListenerManager.removeListener(TAG)
// 移除 业务配置监听
CallerDevaToolsFuncConfigListenerManager.unRegisterDevaToolsFuncConfigListener(this)
if (logInfoView != null) {
logInfoView!!.onEnterBackground()
}
@@ -561,7 +575,7 @@ class DebugSettingView @JvmOverloads constructor(
// 演示模式
tbIsDemoMode.setOnCheckedChangeListener { _, isChecked ->
CallerAutoPilotManager.setDemoMode(isChecked)
if(!isChecked){
if (!isChecked) {
//关闭美化模式时,通知工控机
CallerAutoPilotManager.setIPCDemoMode(isChecked)
}
@@ -574,7 +588,7 @@ class DebugSettingView @JvmOverloads constructor(
}
//只在司机端设置美化模式开关功能
if(AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)){
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
tbIsDemoMode.visibility = View.GONE
}
@@ -652,12 +666,8 @@ class DebugSettingView @JvmOverloads constructor(
// 初始化 tracker感知数据源 数据
trackerProvider.check(
when (FunctionBuildConfig.debugTrackerProvider) {
0 -> {
R.id.trackerProviderOrigin
}
1 -> {
R.id.trackerProviderObu
}
0 -> R.id.trackerProviderOrigin
1 -> R.id.trackerProviderObu
else -> R.id.trackerProviderOrigin
}
)
@@ -666,14 +676,38 @@ class DebugSettingView @JvmOverloads constructor(
R.id.trackerProviderOrigin -> {
FunctionBuildConfig.debugTrackerProvider = 0
// update tracker provider view
trackerIPCProvider.visibility = View.VISIBLE
}
R.id.trackerProviderObu -> {
FunctionBuildConfig.debugTrackerProvider = 1
// update tracker provider view
trackerIPCProvider.visibility = View.GONE
}
}
}
// 初始化 trackerIPC 感知数据源 数据
trackerIPCProvider.check(
when (FunctionBuildConfig.trackerIPCProvider) {
0 -> R.id.trackerIPCUnion
1 -> R.id.trackerIPCObu
2 -> R.id.trackerIPCV2N
else -> R.id.trackerIPCUnion
}
)
trackerProvider.setOnCheckedChangeListener{ _, checkedId ->
when(checkedId){
R.id.trackerIPCUnion -> {
FunctionBuildConfig.trackerIPCProvider = 0
}
R.id.trackerIPCObu -> {
FunctionBuildConfig.trackerIPCProvider = 1
}
R.id.trackerIPCV2N -> {
FunctionBuildConfig.trackerIPCProvider = 2
}
}
}
// 初始化 ADAS感知数据是否绘制 选择情况
tbIsDrawIdentifyData.isChecked = FunctionBuildConfig.isDrawIdentifyData
@@ -810,20 +844,21 @@ class DebugSettingView @JvmOverloads constructor(
}
//状态中心-后台优化状态
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val backgroundStatus = "后台运行:" + if (BackgrounderPermission.getInstance()
.isPermissionLongBackgroundRunning(context)
) "<font color='green'>已优化</font>" else "<font color='red'>未优化</font>"
tvBackgroundOperation.text = Html.fromHtml(backgroundStatus, Html.FROM_HTML_MODE_LEGACY)
tvBackgroundOperation.setOnClickListener {
BackgrounderPermission.getInstance().showPermissionLongBackgroundRunningDialog(context)
BackgrounderPermission.getInstance()
.showPermissionLongBackgroundRunningDialog(context)
}
BackgrounderPermission.getInstance().setListener {
val str =
"后台运行:" + if (it) "<font color='green'>已优化</font>" else "<font color='red'>未优化</font>"
tvBackgroundOperation.text = Html.fromHtml(str, Html.FROM_HTML_MODE_LEGACY)
}
}else {
} else {
tvBackgroundOperation.visibility = GONE
}
//设置工控机连接状态
@@ -833,7 +868,8 @@ class DebugSettingView @JvmOverloads constructor(
/**
* 设置鹰眼本地参数配置监听
*/
@SuppressLint("SetTextI18n") private fun setEagleEyeConfigListener() {
@SuppressLint("SetTextI18n")
private fun setEagleEyeConfigListener() {
//初始化刹车加速度阈值信息
val brakeThreshold = SharedPrefsMgr.getInstance(context)
.getFloat(MoGoConfig.BRAKE_ACCELERATION_THRESHOLD, -2.5F)
@@ -885,7 +921,7 @@ class DebugSettingView @JvmOverloads constructor(
FunctionBuildConfig.isReportWarning = isChecked
}
//异常上报开关只在司机端展示
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)){
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
tbReportWarning.visibility = GONE
}
@@ -896,7 +932,7 @@ class DebugSettingView @JvmOverloads constructor(
p.menuInflater.inflate(R.menu.menu_env_pop, p.menu)
MenuCompat.setGroupDividerEnabled(p.menu, true)
p.setOnMenuItemClickListener { item ->
when(item.itemId) {
when (item.itemId) {
R.id.group_hy -> {
return@setOnMenuItemClickListener false
}
@@ -1104,7 +1140,10 @@ class DebugSettingView @JvmOverloads constructor(
accelerationIsShow = isChecked
}
tbRouteDynamicEffect.isChecked = AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) && !AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)
tbRouteDynamicEffect.isChecked =
AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) && !AppIdentityModeUtils.isBus(
FunctionBuildConfig.appIdentityMode
)
tbRouteDynamicEffect.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
@@ -1586,50 +1625,6 @@ class DebugSettingView @JvmOverloads constructor(
*/
@SuppressLint("SetTextI18n")
private fun drawAppInfo() {
AppConfigInfo.appName = AppUtils.getAppName()
if (AppConfigInfo.appVersionCode == 0) {
AppConfigInfo.appVersionCode = AppUtils.getAppVersionCode()
}
if (AppConfigInfo.appVersionName.isNullOrEmpty()) {
AppConfigInfo.appVersionName = AppUtils.getAppVersionName()
}
if (AppConfigInfo.appPackageName.isNullOrEmpty()) {
AppConfigInfo.appPackageName = AppUtils.getAppPackageName()
}
if (AppConfigInfo.uniqueDeviceId.isNullOrEmpty()) {
AppConfigInfo.uniqueDeviceId = DeviceIdUtils.getDeviceId(AbsMogoApplication.getApp())
}
if (AppConfigInfo.widevineIDMd5.isNullOrEmpty()) {
AppConfigInfo.widevineIDMd5 =
DeviceIdUtils.getWidevineIDWithMd5(AbsMogoApplication.getApp())
}
if (MoGoAiCloudClient.getInstance().aiCloudClientConfig != null) {
AppConfigInfo.mogoSN = MoGoAiCloudClient.getInstance().aiCloudClientConfig.sn
AppConfigInfo.mogoToken = MoGoAiCloudClient.getInstance().aiCloudClientConfig.token
}
AppConfigInfo.netMode = DebugConfig.getNetMode()
if (MogoMap.getInstance().mogoMap != null) {
AppConfigInfo.mapSdkVersion = MogoMap.getInstance().mogoMap.mapVersion
}
AppConfigInfo.isConnectNet = NetworkUtils.isConnected(context)
AppConfigInfo.isConnectSocket = DebugConfig.isDownloadSnapshot()
when {
AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) -> {// 司机端
AppConfigInfo.isDriver = true
AppConfigInfo.isConnectedNetty = CallerTelematicManager.getServerStarted()
}
AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) -> {
AppConfigInfo.isDriver = false
AppConfigInfo.isConnectedNetty = CallerTelematicManager.getClientConnStatus()
AppConfigInfo.serverSn = CallerTelematicManager.getServerToken()
}
else -> {
}
}
AppConfigInfo.teleTimeStamp = CallerAutoPilotManager.getTeleTimeStamp()
/**
* 设备绑定关系
*/
@@ -1825,16 +1820,14 @@ class DebugSettingView @JvmOverloads constructor(
*/
override fun onAutopilotStatusResponse(autoPilotStatusInfo: AutopilotStatusInfo) {
mAutoPilotStatusInfo = autoPilotStatusInfo
AppConfigInfo.isConnectAutopilot = autoPilotStatusInfo.connectStatus
AppConfigInfo.connectStatusDescribe = autoPilotStatusInfo.connectStatusDescribe
setAutopilotConnectStatus()
}
/**
* 设置工控机连接状态
*/
private fun setAutopilotConnectStatus(){
ThreadUtils.runOnUiThread{
private fun setAutopilotConnectStatus() {
ThreadUtils.runOnUiThread {
tvAutopilotConnectStatus.text = Html.fromHtml(
"工控机连接状态:${
if (AppConfigInfo.isConnectAutopilot) {
@@ -1880,6 +1873,22 @@ class DebugSettingView @JvmOverloads constructor(
}
}
override fun updateBizData(type: String, state: Boolean, lock: Boolean, data: String?) {
when (type) {
BIZ_BEAUTY_MODE -> tbIsDemoMode.isClickable = !lock
BIZ_RAIN_MODE -> tbIsRainMode.isClickable = !lock
BIZ_WARNING_UPLOAD -> tbReportWarning.isClickable = !lock
BIZ_BAG_RECORD -> {
if (lock) {
btnRecordBag.isClickable = false
} else {
btnRecordBag.isClickable = true
btnRecordBag.requestFocus()
}
}
}
}
override fun onAutopilotCarStateData(gnssInfo: MessagePad.GnssInfo?) {
mGnssInfo = gnssInfo
//实时加速度列表
@@ -1945,18 +1954,6 @@ class DebugSettingView @JvmOverloads constructor(
mRouteInfoSize = globalPathResp?.wayPointsList?.size ?: 0
}
/**
* 工控机基础信息回调
*/
override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) {
carConfigResp.let {
AppConfigInfo.plateNumber = it.plateNumber//车牌号
AppConfigInfo.iPCMacAddress = it.macAddress//工控机MAC地址
AppConfigInfo.protocolVersionNumber = it.protocolVersionValue//工控机协议版本
}
}
/**
* 工控机异常回调
*/
@@ -2077,7 +2074,8 @@ class DebugSettingView @JvmOverloads constructor(
private fun toastMsg(msg: String) {
//当司机屏处于美化演示模式、msg为空时不弹吐司
if (!FunctionBuildConfig.isDemoMode && msg.isNotEmpty()
&& AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
&& AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)
) {
ToastUtils.showLong(msg)
}
}
@@ -2135,4 +2133,5 @@ class DebugSettingView @JvmOverloads constructor(
fun showReportListWindow(show: Boolean)
}
}

View File

@@ -0,0 +1,18 @@
package com.mogo.eagle.core.function.hmi.ui.takeover
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 TakeOverView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
init {
LayoutInflater.from(context).inflate(R.layout.view_take_over, this, true)
}
}

View File

@@ -231,9 +231,6 @@ class AutoPilotAndCheckView @JvmOverloads constructor(
speedLimit = carConfigResp.speedLimit
tvAcceleration.text = "加速度 ${carConfigResp.maxAcceleration} m/s²"
etInputSpeed.setText((carConfigResp.speedLimit * 3.6).toInt().toString())
AppConfigInfo.plateNumber = carConfigResp.plateNumber//车牌号
AppConfigInfo.iPCMacAddress = carConfigResp.macAddress//工控机MAC地址
AppConfigInfo.protocolVersionNumber = carConfigResp.protocolVersionValue//工控机协议版本
}
}
}

View File

@@ -114,7 +114,7 @@ public abstract class MainMoGoApplication extends AbsMogoApplication {
}
SocketBuildConfig.isPrintLog = false;
// 初始化DevaTools,开始链路记录
CallerDevaToolsManager.INSTANCE.init(this);
CallerDevaToolsManager.INSTANCE.init();
}
private void initOverviewDb() {

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 KiB

View File

@@ -48,6 +48,16 @@
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.mogo.eagle.core.function.hmi.ui.takeover.TakeOverView
android:id="@+id/clTakeOverView"
android:visibility="gone"
android:layout_width="@dimen/hmi_take_over_request_width"
android:layout_height="@dimen/hmi_take_over_request_height"
android:layout_marginTop="@dimen/hmi_take_over_request_m_top"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--自动驾驶按钮及状态-->
<com.mogo.eagle.core.function.hmi.ui.widget.AutoPilotStatusView
android:id="@+id/viewAutopilotStatus"
@@ -186,8 +196,8 @@
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_110"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<!--APP、MAP版本-->
<com.mogo.eagle.core.function.hmi.ui.widget.VersionNameView
@@ -203,10 +213,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="30px"
app:layout_constraintTop_toTopOf="@+id/viewLimitingVelocity"
app:layout_constraintEnd_toStartOf="@+id/viewLimitingVelocity"
app:layout_goneMarginTop="30px"
app:layout_goneMarginEnd="40px"/>
app:layout_constraintTop_toTopOf="@+id/viewLimitingVelocity"
app:layout_goneMarginEnd="40px"
app:layout_goneMarginTop="30px" />
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- app:layout_constraintBottom_toBottomOf="parent"-->

View File

@@ -1783,6 +1783,44 @@
</RadioGroup>
<RadioGroup
android:id="@+id/trackerIPCProvider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintTop_toBottomOf="@id/trackerProvider">
<RadioButton
android:id="@+id/trackerIPCUnion"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="@dimen/dp_10"
android:text="融合感知数据"
android:textColor="#000"
android:textSize="@dimen/dp_24" />
<RadioButton
android:id="@+id/trackerIPCObu"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="@dimen/dp_10"
android:text="融合OBU感知数据"
android:textColor="#000"
android:textSize="@dimen/dp_24" />
<RadioButton
android:id="@+id/trackerIPCV2N"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="@dimen/dp_10"
android:text="融合V2N感知数据"
android:textColor="#000"
android:textSize="@dimen/dp_24" />
</RadioGroup>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="@dimen/hmi_take_over_request_width"
android:layout_height="@dimen/hmi_take_over_request_height">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/icon_take_over_request"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -66,4 +66,7 @@
<dimen name="module_mogo_och_margin_left">40px</dimen>
<dimen name="module_mogo_och_margin_bottom">46px</dimen>
<dimen name="hmi_take_over_request_width">810px</dimen>
<dimen name="hmi_take_over_request_height">560px</dimen>
<dimen name="hmi_take_over_request_m_top">524px</dimen>
</resources>

View File

@@ -65,4 +65,8 @@
<dimen name="module_mogo_och_autopilot_status_text_size">42px</dimen>
<dimen name="module_mogo_och_margin_left">40px</dimen>
<dimen name="module_mogo_och_margin_bottom">46px</dimen>
<dimen name="hmi_take_over_request_width">810px</dimen>
<dimen name="hmi_take_over_request_height">560px</dimen>
<dimen name="hmi_take_over_request_m_top">524px</dimen>
</resources>