Merge branch 'dev_robotaxi-d-app-module_251_220125_2.5.1' into dev_MogoAP_eagle-220_211207_8.0.17_merge

This commit is contained in:
donghongyu
2022-02-16 19:44:08 +08:00
29 changed files with 435 additions and 209 deletions

View File

@@ -53,7 +53,6 @@ dependencies {
implementation rootProject.ext.dependencies.mogoaicloudtrafficlive
kapt rootProject.ext.dependencies.aroutercompiler
kapt rootProject.ext.dependencies.androidxroomcompiler
implementation rootProject.ext.dependencies.androidxroomruntime
implementation rootProject.ext.dependencies.androidxroomktx

View File

@@ -7,7 +7,10 @@ import android.text.TextUtils
import android.util.Log
import android.view.*
import android.view.animation.OvershootInterpolator
import androidx.lifecycle.Lifecycle.Event.ON_DESTROY
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.lifecycleScope
import androidx.transition.*
import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.mvp.MvpFragment
@@ -42,6 +45,7 @@ import com.mogo.eagle.core.function.hmi.ui.tools.AutoPilotBadCaseView
import com.mogo.eagle.core.function.hmi.ui.tools.Repository
import com.mogo.eagle.core.function.hmi.ui.tools.post
import com.mogo.eagle.core.function.hmi.ui.widget.V2XNotificationView
import com.mogo.eagle.core.utilcode.kotlin.lifecycleOwner
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.util.ThreadUtils
@@ -91,6 +95,9 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
private var autoPilotBadCaseView: AutoPilotBadCaseView? = null
private var onBadCaseShow: (() -> Unit)? = null
private var onBadCaseHide: (() -> Unit)? = null
companion object {
private const val MSG_WHAT_DISMISS_BAD_CASE_ENTRY = 0x1010
private val CASE_EXPIRE_DURATION = TimeUnit.HOURS.toMillis(4)
@@ -154,8 +161,13 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
showBadCaseEntrance(it)
}
} else {
entrance.takeIf { it.visibility != View.VISIBLE }?.also {
it.visibility = View.VISIBLE
withContext(Dispatchers.Main) {
entrance.takeIf { it.visibility != View.VISIBLE }?.also {
(entrance.parent as? ViewGroup)?.let { g ->
TransitionManager.beginDelayedTransition(g, AutoTransition())
}
it.visibility = View.VISIBLE
}
}
Log.d("QQQ", "record: [$old] hasn't been consumed~~~~" )
}
@@ -169,7 +181,7 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
}
private val handler by lazy {
Handler(Handler.Callback {
Handler(Handler.Callback { it ->
if (it.what == MSG_WHAT_DISMISS_BAD_CASE_ENTRY) {
val entrance = autoPilotBadCaseEntrance
if (entrance != null && entrance.visibility == View.VISIBLE) {
@@ -186,7 +198,13 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
}
}
dismissBadCaseFloatView()
entrance.visibility = View.GONE
if (entrance.visibility != View.GONE) {
(entrance.parent as? ViewGroup)?.let { g ->
TransitionManager.beginDelayedTransition(g, AutoTransition())
}
entrance.visibility = View.GONE
onBadCaseHide?.invoke()
}
}
return@Callback true
}
@@ -230,7 +248,7 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
}
}
@ExperimentalCoroutinesApi
@OptIn(ExperimentalCoroutinesApi::class)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
CallerAutopilotIdentifyListenerManager.addListener(TAG, this)
@@ -248,7 +266,7 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
}
}
@ExperimentalCoroutinesApi
@OptIn(ExperimentalCoroutinesApi::class)
override fun onAutopilotRecordResult(record: AutoPilotRecordResult?) {
record ?: return
Log.d("QQQ", "onAutopilotRecordResult:$record")
@@ -277,27 +295,66 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
private fun showBadCaseEntrance(record: AutoPilotRecordResult) {
Log.d("QQQ", "showBadCaseEntrance:$record")
lifecycleScope.launch {
if (vs_bad_case_entrance?.parent != null) {
val inflateView = vs_bad_case_entrance.inflate()
autoPilotBadCaseEntrance = inflateView
if (HmiBuildConfig.isShowBadCaseView) {
if (vsBadCaseToolsView?.parent != null) {
val inflateView = vsBadCaseToolsView.inflate()
autoPilotBadCaseEntrance = inflateView
}
}
val entrance = autoPilotBadCaseEntrance
Log.d("QQQ", "show --- 1 ----")
if (entrance != null) {
if (entrance.visibility != View.VISIBLE) {
(entrance.parent as? ViewGroup)?.let { g ->
TransitionManager.beginDelayedTransition(g, AutoTransition())
}
entrance.visibility = View.VISIBLE
}
entrance.setTag(R.id.autopilot_badcase_record, record)
entrance.onClick {
showBadCasesFloat {
it.visibility = View.GONE
if (it.visibility != View.GONE) {
(entrance.parent as? ViewGroup)?.let { g ->
TransitionManager.beginDelayedTransition(g, AutoTransition())
}
it.visibility = View.GONE
onBadCaseHide?.invoke()
}
}
}
dismissBadCaseEntryAfterSomeTime()
} else {
onBadCaseShow?.invoke()
}
}
}
override fun showBadCaseEntrance(entrance: View) {
entrance.lifecycleOwner.lifecycle.addObserver(badCaseEntranceObserver)
autoPilotBadCaseEntrance = entrance
lifecycleScope.launch {
withContext(Dispatchers.IO) {
val dao = Repository.dao()
dao.getAllUnConsumedRecords()?.first()?.let {
showBadCaseEntrance(it)
}
}
}
}
private val badCaseEntranceObserver = LifecycleEventObserver { _, event ->
if (event == ON_DESTROY) {
onBadCaseShow = null
onBadCaseHide = null
autoPilotBadCaseEntrance = null
}
}
override fun registerBadCaseCallback(onShow: () -> Unit, onHide: (() -> Unit)?) {
onBadCaseShow = onShow
onBadCaseHide = onHide
}
private fun showBadCasesFloat(dismiss: (() -> Unit)?) {
Log.d("QQQ", "showBadCaseToolsFloat")
context?.let { it ->
@@ -502,7 +559,6 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
} else {
setToolsViewVisibility(View.GONE)
}
}
override fun getLayoutId(): Int {

View File

@@ -1,6 +1,7 @@
package com.mogo.eagle.core.function.hmi.ui.setting
import android.content.Context
import android.text.Html
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
@@ -42,6 +43,7 @@ import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
import com.mogo.eagle.core.utilcode.util.*
import com.mogo.map.MogoMap
import kotlinx.android.synthetic.main.view_debug_setting.view.*
import java.util.*
/**
* @author xiaoyuzhou
@@ -62,11 +64,26 @@ class DebugSettingView @JvmOverloads constructor(
private var logInfoView: LogInfoView? = null
private var logViewAttach = false
private var mAutoPilotStatusInfo: AutopilotStatusInfo?=null
private var mAutoPilotCarStateInfo: AutopilotCarStateInfo?=null
init {
LayoutInflater.from(context).inflate(R.layout.view_debug_setting, this, true)
initView()
}
/**
* 定时刷新视图数据防止因为过快更新导致anr异常
*/
private val timerTaskRefresh = object : TimerTask() {
override fun run() {
UiThreadHandler.post {
// 绘制应用基本信息
drawAppInfo()
}
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
// 添加 OBU状态 监听
@@ -82,6 +99,8 @@ class DebugSettingView @JvmOverloads constructor(
if (logInfoView != null) {
logInfoView!!.onEnterForeground()
}
// 开启定时查询速度
Timer().schedule(timerTaskRefresh, Date(), 100)
}
override fun onDetachedFromWindow() {
@@ -99,6 +118,11 @@ class DebugSettingView @JvmOverloads constructor(
if (logInfoView != null) {
logInfoView!!.onEnterBackground()
}
try {
timerTaskRefresh.cancel()
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun initView() {
@@ -260,10 +284,16 @@ class DebugSettingView @JvmOverloads constructor(
SharedPrefsMgr.getInstance(context).getBoolean(MoGoConfig.IS_DEMO_MODE, false)
CallerAutoPilotManager.setDemoMode(isDemoMode)
tbIsDemoMode.isChecked = isDemoMode
if (isDemoMode){
FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true
}
// 演示模式
tbIsDemoMode.setOnCheckedChangeListener { buttonView, isChecked ->
CallerAutoPilotManager.setDemoMode(isChecked)
FunctionBuildConfig.isDemoMode = isChecked
if (!FunctionBuildConfig.isDemoMode){
FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = false
}
SharedPrefsMgr.getInstance(context).putBoolean(MoGoConfig.IS_DEMO_MODE, isChecked)
}
@@ -371,35 +401,33 @@ class DebugSettingView @JvmOverloads constructor(
AppConfigInfo.isConnectSocket = DebugConfig.isDownloadSnapshot()
// 将数据绘制
tvAppInfo.text = AppConfigInfo.toString()
tvAppInfo.text = Html.fromHtml(AppConfigInfo.toString())
tvAutopilotInfo.text = GsonUtils.toJson(mAutoPilotStatusInfo)
tvCarInfo.text =
"GPS时间${mAutoPilotCarStateInfo?.values?.satelliteTime}\n" +
"自车经纬度:\n${mAutoPilotCarStateInfo?.values?.lon}\n${mAutoPilotCarStateInfo?.values?.lat}\n"
}
/**
* OBU状态回调
*/
override fun onObuStatusResponse(obuStatusInfo: ObuStatusInfo) {
UiThreadHandler.post {
tvObuInfo.text = GsonUtils.toJson(obuStatusInfo)
tvObuInfo.text = GsonUtils.toJson(obuStatusInfo)
AppConfigInfo.obuSdkVersion = obuStatusInfo.obuSdkVersion
AppConfigInfo.isConnectObu = obuStatusInfo.obuStatus
drawAppInfo()
}
AppConfigInfo.obuSdkVersion = obuStatusInfo.obuSdkVersion
AppConfigInfo.isConnectObu = obuStatusInfo.obuStatus
}
/**
* 自动驾驶状态回调
*/
override fun onAutopilotStatusResponse(autoPilotStatusInfo: AutopilotStatusInfo) {
UiThreadHandler.post {
tvAutopilotInfo.post {
tvAutopilotInfo.text = GsonUtils.toJson(autoPilotStatusInfo)
mAutoPilotStatusInfo = autoPilotStatusInfo
AppConfigInfo.adasSdkVersion = autoPilotStatusInfo.version
AppConfigInfo.isConnectAutopilot = autoPilotStatusInfo.connectStatus
drawAppInfo()
}
}
AppConfigInfo.adasSdkVersion = autoPilotStatusInfo.version
AppConfigInfo.isConnectAutopilot = autoPilotStatusInfo.connectStatus
}
override fun onAutopilotArriveAtStation(autopilotWayArrive: AutopilotStationInfo?) {
@@ -408,13 +436,7 @@ class DebugSettingView @JvmOverloads constructor(
override fun onAutopilotCarStateData(autoPilotCarStateInfo: AutopilotCarStateInfo?) {
//Logger.d(TAG, "autoPilotCarStateInfo:$autoPilotCarStateInfo")
UiThreadHandler.post {
tvAutopilotInfo.post {
tvCarInfo.text =
"GPS时间${autoPilotCarStateInfo?.values?.satelliteTime}\n" +
"自车经纬度:\n${autoPilotCarStateInfo?.values?.lon}\n${autoPilotCarStateInfo?.values?.lat}\n"
}
}
mAutoPilotCarStateInfo = autoPilotCarStateInfo
}
override fun onAutopilotSNRequest() {

View File

@@ -99,8 +99,8 @@
app:layout_goneMarginStart="50px" />
<ViewStub
android:id="@+id/vs_bad_case_entrance"
android:inflatedId="@+id/bad_case_entrance"
android:id="@+id/vsBadCaseToolsView"
android:inflatedId="@+id/badCaseToolsView"
android:layout_width="@dimen/module_hmi_check_size"
android:layout_height="@dimen/module_hmi_check_size"
android:layout_marginStart="25px"

View File

@@ -31,27 +31,6 @@
android:textSize="@dimen/dp_28"
android:textStyle="bold" />
<!-- <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="PAD系统时间"
android:textColor="#000"
android:textSize="@dimen/dp_36" />
<TextClock
android:id="@+id/tvNowTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:format12Hour="yyyy年MM月dd日 EEEE aa HH:mm:ss"
android:format24Hour="yyyy年MM月dd日 EEEE aa HH:mm:ss"
android:textColor="#000"
android:textSize="@dimen/dp_36" />
</LinearLayout>-->
<TextView
android:id="@+id/tvAppInfo"
android:layout_width="match_parent"