Merge branch 'dev_robotaxi-d_241112_6.8.0' of gitlab.zhidaoauto.com:SCA/L4HA/AndroidApp/MoGoEagleEye into dev_robotaxi-d_241112_6.8.0

This commit is contained in:
xinfengkun
2024-11-19 10:34:28 +08:00
54 changed files with 1210 additions and 111 deletions

View File

@@ -216,7 +216,12 @@ class StartAutoPilotStatusView @JvmOverloads constructor(
if (isAnyOneError) R.drawable.icon_no_fsm_status_bg_error
else R.drawable.icon_no_fsm_status_bg_normal
)
notifyStatus(isAnyOneError)
if (!hasFSM.get()) {
notifyStatus(isAnyOneError)
Logger.d(TAG, "--- handleWithoutFSM --- do update")
} else {
Logger.d(TAG, "--- handleWithoutFSM --- do not update")
}
}
private fun notifyStatus(isError: Boolean) {

View File

@@ -29,6 +29,7 @@ import com.iflytek.cloud.RecognizerListener
import com.iflytek.cloud.RecognizerResult
import com.iflytek.cloud.SpeechError
import com.iflytek.cloud.SpeechRecognizer
import com.mogo.commons.env.ProjectUtils
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.deva.report.CategoryInfo
@@ -173,7 +174,9 @@ class FaultReasonView @JvmOverloads constructor(
iconDown?.setBounds(0, 0, iconDown.minimumWidth, iconDown.minimumHeight)
iconUp?.setBounds(0, 0, iconUp.minimumWidth, iconUp.minimumHeight)
//获取一级分类
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId, 1, 0, type, 0)
if(ProjectUtils.isSaas()){
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId, 1, 0, type, 0)
}
//弹窗展示时间
tvFaultTime.text =
millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())
@@ -538,7 +541,9 @@ class FaultReasonView @JvmOverloads constructor(
override fun getCategoriesError(msg: String) {
super.getCategoriesError(msg)
ToastUtils.showShort("故障列表获取失败:$msg")
if(ProjectUtils.isSaas()){
ToastUtils.showShort("故障列表获取失败:$msg")
}
}
override fun onVisibilityAggregated(isVisible: Boolean) {
@@ -546,7 +551,9 @@ class FaultReasonView @JvmOverloads constructor(
if(visibility == View.VISIBLE){
CallerDevaToolsListenerManager.addListener(TAG, this)
//获取一级分类
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId, 1, 0, type, 0)
if(ProjectUtils.isSaas()){
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId, 1, 0, type, 0)
}
//弹窗展示时间
tvFaultTime.text =
millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())

View File

@@ -191,6 +191,8 @@ class ReportTypeView @JvmOverloads constructor(
}
}
oneClickTimer?.start()
//请求一键上报故障码
CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,level,0,4,1)
}
/**
@@ -296,9 +298,11 @@ class ReportTypeView @JvmOverloads constructor(
Log.i(TAG,"onAutopilotStatistics status = "+ it.status)
if(it.status == AutopilotStatistics.AUTOPILOT_START_STATUS.FAILED){
//触发一键上报
ThreadUtils.runOnUiThread {
if(!typeSelectStatus){
showOneCLickReportView()
if(ProjectUtils.isSaas()){
ThreadUtils.runOnUiThread {
if(!typeSelectStatus){
showOneCLickReportView()
}
}
}
}

View File

@@ -12,6 +12,8 @@ import android.view.LayoutInflater
import android.view.View
import android.view.animation.AccelerateDecelerateInterpolator
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.marginBottom
import androidx.core.view.marginEnd
import androidx.core.view.marginStart
import androidx.core.view.marginTop
import com.mogo.eagle.core.data.config.FunctionBuildConfig
@@ -44,6 +46,8 @@ class MapContainerLayout @JvmOverloads constructor(
private var mapMaxHeight = 0
private var maxMarginStart = 0
private var maxMarginTop = 0
private var maxMarginEnd = 0
private var maxMarginBottom = 0
private var zoomInAnimator: ValueAnimator? = null
private var zoomOutAnimator: ValueAnimator? = null
@@ -102,6 +106,8 @@ class MapContainerLayout @JvmOverloads constructor(
mapMinHeight = overMapView.height
maxMarginStart = overMapView.marginStart
maxMarginTop = overMapView.marginTop
maxMarginEnd = overMapView.marginEnd
maxMarginBottom = overMapView.marginBottom
}
override fun onAttachedToWindow() {
@@ -164,6 +170,8 @@ class MapContainerLayout @JvmOverloads constructor(
layoutParams.height = evaluator.evaluate(it.animatedFraction, mapMinHeight, mapMaxHeight)
layoutParams.leftMargin = evaluator.evaluate(it.animatedFraction, maxMarginStart, 0)
layoutParams.topMargin = evaluator.evaluate(it.animatedFraction, maxMarginTop, 0)
layoutParams.rightMargin = evaluator.evaluate(it.animatedFraction, maxMarginEnd, 0)
layoutParams.bottomMargin = evaluator.evaluate(it.animatedFraction, maxMarginBottom, 0)
}
}
zoomInAnimator?.interpolator = AccelerateDecelerateInterpolator()
@@ -181,6 +189,8 @@ class MapContainerLayout @JvmOverloads constructor(
layoutParams.height = evaluator.evaluate(it.animatedFraction, mapMaxHeight, mapMinHeight)
layoutParams.leftMargin = evaluator.evaluate(it.animatedFraction, 0, maxMarginStart)
layoutParams.topMargin = evaluator.evaluate(it.animatedFraction, 0, maxMarginTop)
layoutParams.rightMargin = evaluator.evaluate(it.animatedFraction, 0, maxMarginEnd)
layoutParams.bottomMargin = evaluator.evaluate(it.animatedFraction, 0, maxMarginBottom)
}
}
zoomOutAnimator?.interpolator = AccelerateDecelerateInterpolator()

View File

@@ -31,6 +31,7 @@ import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.FUNC_MODE_DEMO
import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.FUNC_MODE_RAIN
import com.mogo.eagle.core.function.api.setting.ISopSettingListener
import com.mogo.eagle.core.function.api.telematic.IReceivedMsgListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager
@@ -41,6 +42,7 @@ import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.call.obu.CallerObuApiManager
import com.mogo.eagle.core.function.call.setting.CallerSopSettingManager
import com.mogo.eagle.core.function.call.telematic.CallerTelematicListenerManager
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
import com.mogo.eagle.core.function.call.unmanned.CallerUnmannedListenerManager
import com.mogo.eagle.core.function.call.vehicle.CallerSweeperModeListenerManager
@@ -59,11 +61,13 @@ import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils
import com.mogo.eagle.core.utilcode.rv.divider.CommonDividerItemDecoration
import com.mogo.eagle.core.utilcode.util.AppStateManager
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.GsonUtils.*
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.zhjt.mogo.adas.data.AdasConstants
import com.zhjt.mogo.adas.data.bean.AdasParam
import kotlinx.android.synthetic.main.layout_operate_panel.view.iv_operate_panel_close
import kotlinx.android.synthetic.main.layout_operate_panel_preference_widget_switch_compat.switchWidget
import kotlinx.coroutines.launch
import me.jessyan.autosize.utils.AutoSizeUtils
import mogo.telematics.pad.MessagePad
@@ -669,9 +673,10 @@ class OperatePanelLayout : LinearLayout {
}
}
class BusinessPreferenceFragmentCompat : OperatePanelDetailBase() {
class BusinessPreferenceFragmentCompat : OperatePanelDetailBase(), IReceivedMsgListener {
companion object {
private const val TAG = "BusinessPreferenceFragmentCompat"
private const val KEY_FAULT_REPORT_TIP = "fault_report_tip"
private const val KEY_LIMIT_SPEED_MARKER = "limit_speed_marker"
private const val KEY_WEATHER_EFFECT_SWITCH = "weather_effect_switch"
@@ -680,6 +685,22 @@ class OperatePanelLayout : LinearLayout {
private const val KEY_UNMANNED_DEMO_PULL_INTERVAL = "unmanned_demo_pull_interval"
private const val KEY_SWEEPER_CLOUD_CONTROL = "sweeper_cloud_control"
private const val KEY_LOOK_AROUND_360 = "look_around_360"
private const val KEY_DRIVE_SEAT_VIDEO_STREAM = "drive_seat_video_stream"
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
CallerTelematicListenerManager.addListener(TAG, this)
lifecycleScope.launchWhenResumed {
preferenceScreen.findPreferenceReal<SwitchPreferenceCompat>(KEY_DRIVE_SEAT_VIDEO_STREAM)?.also {
it.isEnabled = CallerDevaToolsManager.driveSeatVideoProvider()?.requestVideoInfo()?.livePlayUrl?.isNotEmpty() ?: false
}
}
}
override fun onDestroyView() {
super.onDestroyView()
CallerTelematicListenerManager.removeListener(TAG)
}
override fun getDefaultVal(pref: Preference): Any? {
@@ -758,6 +779,30 @@ class OperatePanelLayout : LinearLayout {
return super.onPreferenceClick(preference)
}
override fun onReceivedMsg(type: Int, byteArray: ByteArray) {
if (type == TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_RSP) {
val s = String(byteArray)
clickEventAnalytics("视频流驾驶位开头-RSP->$s", false)
lifecycleScope.launchWhenResumed {
when(s) {
"01" -> {
//关闭成功
FunctionBuildConfig.isDriveSeatVideoStream = false
preferenceScreen.findPreferenceReal<SwitchPreferenceCompat>(KEY_DRIVE_SEAT_VIDEO_STREAM)?.also { changeValue(it, false) }
}
"11" -> {
//打开成功
FunctionBuildConfig.isDriveSeatVideoStream = true
preferenceScreen.findPreferenceReal<SwitchPreferenceCompat>(KEY_DRIVE_SEAT_VIDEO_STREAM)?.also { changeValue(it, true) }
}
else -> {
//关闭失败或打开失败
}
}
}
}
}
override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean {
when (preference.key) {
KEY_FAULT_REPORT_TIP -> {
@@ -848,6 +893,15 @@ class OperatePanelLayout : LinearLayout {
clickEventAnalytics("清扫云控业务", isChecked)
return true
}
KEY_DRIVE_SEAT_VIDEO_STREAM -> {
val isChecked = newValue as? Boolean ?: false
clickEventAnalytics("视频流驾驶位开关", isChecked)
val map = HashMap<String, String>()
map["open"] = if (isChecked) "1" else "0"
map["playUrl"] = CallerDevaToolsManager.driveSeatVideoProvider()?.getLastData()?.livePlayUrl ?: ""
CallerTelematicManager.sendMsgToAllClients(TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_REQ, toJson(map).toByteArray())
return false
}
}
return super.onPreferenceChange(preference, newValue)
}

View File

@@ -9,6 +9,8 @@ import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Build
import android.os.Environment
import android.os.Environment.*
import android.os.Process
import android.text.Html
import android.text.TextUtils
@@ -116,6 +118,7 @@ import com.mogo.eagle.core.utilcode.util.AppUtils
import com.mogo.eagle.core.utilcode.util.BarUtils
import com.mogo.eagle.core.utilcode.util.CommonUtils
import com.mogo.eagle.core.utilcode.util.DeviceUtils
import com.mogo.eagle.core.utilcode.util.FileUtils
import com.mogo.eagle.core.utilcode.util.KeyboardUtils
import com.mogo.eagle.core.utilcode.util.NetworkUtils
import com.mogo.eagle.core.utilcode.util.ParseVersionUtils
@@ -143,6 +146,7 @@ import kotlinx.android.synthetic.main.view_debug_setting.view.btChangeEnv
import kotlinx.android.synthetic.main.view_debug_setting.view.btnAppReboot
import kotlinx.android.synthetic.main.view_debug_setting.view.btnBrakeThreshold
import kotlinx.android.synthetic.main.view_debug_setting.view.btnConnectServerIp
import kotlinx.android.synthetic.main.view_debug_setting.view.btnDeleteDB
import kotlinx.android.synthetic.main.view_debug_setting.view.btnDisconnectIpc
import kotlinx.android.synthetic.main.view_debug_setting.view.btnDrawFusion
import kotlinx.android.synthetic.main.view_debug_setting.view.btnHdVisualAdjust
@@ -319,6 +323,8 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import mogo.telematics.pad.MessagePad
import mogo_msg.MogoReportMsg
import java.io.File
import java.io.File.*
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Timer
@@ -1414,6 +1420,18 @@ internal class DebugSettingView @JvmOverloads constructor(
CallerAutoPilotControlManager.connectSpecifiedServer(ip)
}
}
btnDeleteDB.setOnClickListener {
try{
val ROOT_PATH = getExternalStorageDirectory().absolutePath + separator + "Mogo" + separator + "APP_cache" + separator
val dbDir = File(ROOT_PATH)
if(dbDir.exists()&&dbDir.isDirectory){
FileUtils.deleteFilesInDir(dbDir)
}
}catch (e:Exception){
}
}
//是否开启异常上报
tbReportWarning.isChecked = FunctionBuildConfig.isReportWarning

View File

@@ -1345,12 +1345,23 @@
</androidx.appcompat.widget.LinearLayoutCompat>
<Button
android:id="@+id/btnDeleteDB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="@dimen/dp_20"
android:text="删除业务数据库"
android:textSize="@dimen/dp_24"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnBrakeThreshold" />
<View
android:id="@+id/brakeThresholdDivider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#F0F0F0"
app:layout_constraintTop_toBottomOf="@id/btnBrakeThreshold" />
app:layout_constraintTop_toBottomOf="@id/btnDeleteDB" />
<Button
android:id="@+id/btnConnectServerIp"

View File

@@ -23,21 +23,21 @@
android:id="@+id/overMapView"
android:layout_width="270dp"
android:layout_height="270dp"
android:layout_marginStart="1530dp"
android:layout_marginTop="1204dp"
android:layout_marginEnd="40dp"
android:layout_marginBottom="40dp"
android:focusable="false"
android:focusableInTouchMode="false"
app:bottomPadding="160"
app:compassDrawable="@drawable/taxt_u_p_map_car_light"
app:endPointDrawable="@drawable/taxi_overmap_endpoint"
app:globalPathColor="#39BA90"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:leftPadding="70"
app:mapStyleExtraPath="over_view_style_extra.data"
app:mapStylePath="over_view_style.data"
app:resetDrawable="@null"
app:rightPadding="70"
android:focusable="false"
android:focusableInTouchMode="false"
app:roadRangeDrawable="@drawable/taxi_overmap_road_range"
app:roadTrajectoryDrawable="@drawable/taxi_orvermap_road_trajectory"
app:startPointDrawable="@drawable/taxi_overmap_startpoint"

View File

@@ -51,5 +51,12 @@
android:title="360环视"
android:persistent="false"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
<SwitchPreferenceCompat
android:key="drive_seat_video_stream"
android:layout="@layout/layout_operate_panel_preference_switch_compat"
android:title="驾驶位视频流"
android:persistent="false"
android:enabled="false"
android:widgetLayout="@layout/layout_operate_panel_preference_widget_switch_compat" />
</PreferenceCategory>
</androidx.preference.PreferenceScreen>