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:
@@ -276,9 +276,9 @@ internal object V2NIdentifyDrawer: IEventDismissListener {
|
||||
AiRoadMarker.aiMakers.getOrPut(id) {
|
||||
AiRoadMarker().apply {
|
||||
try {
|
||||
val current = abs(location.gnssSpeed) * 3.6f.toInt()
|
||||
val min = abs(data.speedStraightMin * 3.6f).toInt()
|
||||
val max = abs(data.speedStraightMax * 3.6f).toInt()
|
||||
val current = abs(location.gnssSpeed).toInt()
|
||||
val min = abs(data.speedStraightMin).toInt()
|
||||
val max = abs(data.speedStraightMax).toInt()
|
||||
marker(Marker(id, EventTypeEnumNew.TYPE_SOCKET_ROAD_GREE_WAVE.poiType, destX, destY, 0.0, null, null, null), drawMarker = false, false)
|
||||
var alertTts = ""
|
||||
var alertContent = ""
|
||||
@@ -521,7 +521,7 @@ internal object V2NIdentifyDrawer: IEventDismissListener {
|
||||
}
|
||||
|
||||
private fun drawGreenWave(crossSpeed: V2nCrossSpeed) {
|
||||
if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nTotalSwitch) {
|
||||
if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nTotalSwitch && FunctionBuildConfig.v2nGreenWave) {
|
||||
handler.removeMessages(MSG_WHAT_DRAW_GREEN_WAVE)
|
||||
handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_GREEN_WAVE, crossSpeed))
|
||||
}
|
||||
@@ -587,4 +587,4 @@ internal object V2NIdentifyDrawer: IEventDismissListener {
|
||||
// val targetIds = event.exts.split(",")
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
|
||||
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.v2x.CallerTrafficLightListenerManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
@@ -155,6 +156,42 @@ class TeleMsgHandler : IMsgHandler {
|
||||
}
|
||||
return
|
||||
}
|
||||
if (it.protocolType == TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_REQ) {
|
||||
try {
|
||||
Log.d(TAG, "乘客屏收到司机屏转发的驾驶位视频流开关 --- 1 ---")
|
||||
val content = String(it.body, Charset.defaultCharset())
|
||||
Log.d(TAG, "乘客屏收到司机屏转发的驾驶位视频流开关 --- 2 ---:$content")
|
||||
val data = GsonUtils.fromJson(content, Map::class.java)
|
||||
val open = data["open"].toString().toInt() == 1
|
||||
val playUrl = data["playUrl"]?.toString()
|
||||
//TODO yangyakun
|
||||
if (open) {
|
||||
if (playUrl != null) {
|
||||
// 1. 获取视频播放控件
|
||||
val target = CallerDevaToolsManager.driveSeatVideoProvider()?.getDriveVideoView(playUrl) { event ->
|
||||
|
||||
}
|
||||
|
||||
if (target != null) {
|
||||
// 2. 添加到一个ViewGroup上
|
||||
// 11: 第1个1代表运营面板开关打开,第2个1代表打开成功,告之司机端
|
||||
// 10: 第1个1代表运营面板开关打开,第2个0代表打开成功,告之司机端
|
||||
CallerTelematicManager.sendMsgToServer(TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_RSP, "11".toByteArray())
|
||||
}
|
||||
|
||||
} else {
|
||||
CallerTelematicManager.sendMsgToServer(TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_RSP, "10".toByteArray())
|
||||
}
|
||||
} else {
|
||||
//第1个0代表运营面板开关关闭,第2个1代表关闭成功,告之司机端; 相应的还有状态:00表示关闭失败
|
||||
CallerTelematicManager.sendMsgToServer(TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_RSP, "01".toByteArray())
|
||||
}
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
Log.e(TAG, "乘客屏收到司机屏转发的驾驶位视频流开关--- 3 ---", t)
|
||||
}
|
||||
return
|
||||
}
|
||||
when (it.protocolType) {
|
||||
MogoProtocolMsg.NORMAL_DATA -> {
|
||||
try {
|
||||
@@ -349,6 +386,11 @@ class TeleMsgHandler : IMsgHandler {
|
||||
)
|
||||
}
|
||||
|
||||
TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_RSP -> {
|
||||
// 来自客户端的响应
|
||||
CallerTelematicListenerManager.invokeReceivedMsg(TelematicConstant.DRIVE_SEAT_VIDEO_STREAM_RSP, it.body)
|
||||
}
|
||||
|
||||
else -> {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,8 @@ import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
|
||||
import com.zhjt.mogo_core_function_devatools.binding.BindingCarManager
|
||||
import com.zhjt.mogo_core_function_devatools.block.MoGoBlockProviderImpl
|
||||
import com.zhjt.mogo_core_function_devatools.coldstart.ColdStartManager
|
||||
import com.zhjt.mogo_core_function_devatools.driver.video.DriveSeatVideoProviderImpl
|
||||
import com.mogo.eagle.core.function.api.driver.video.IDriveSeatVideoProvider
|
||||
import com.zhjt.mogo_core_function_devatools.env.EnvChangeManager
|
||||
import com.zhjt.mogo_core_function_devatools.exam.ExamControlManager
|
||||
import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigCenter.Companion.bizConfigCenter
|
||||
@@ -125,6 +127,8 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener {
|
||||
ARouter.getInstance().build(MogoServicePaths.PATH_MAP_ROUTE_GUIDE).navigation() as? IMapRouteProvider
|
||||
}
|
||||
|
||||
private val driveSeatVideoProvider by lazy { DriveSeatVideoProviderImpl() }
|
||||
|
||||
@Volatile
|
||||
private var lastCanAutopilotStatus: Int? = null
|
||||
|
||||
@@ -682,4 +686,8 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener {
|
||||
override fun takeOver(@TakeOverAnnotation takeOverAnnotation: Int) {
|
||||
TakeOverManager.takeOverManager.takeOver(takeOverAnnotation)
|
||||
}
|
||||
|
||||
override fun driveSeatVideoProvider(): IDriveSeatVideoProvider {
|
||||
return driveSeatVideoProvider
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,155 @@
|
||||
package com.zhjt.mogo_core_function_devatools.driver.video
|
||||
|
||||
import android.os.Bundle
|
||||
import android.text.TextUtils
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import androidx.core.view.doOnAttach
|
||||
import androidx.core.view.doOnDetach
|
||||
import com.mogo.commons.constants.HostConst
|
||||
import com.mogo.eagle.core.data.BaseResponse
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo
|
||||
import com.mogo.eagle.core.function.api.driver.video.IDriveSeatVideoProvider
|
||||
import com.mogo.eagle.core.function.api.driver.video.IDriveSeatVideoProvider.Event
|
||||
import com.mogo.eagle.core.function.api.driver.video.IDriveSeatVideoProvider.Event.Failed
|
||||
import com.mogo.eagle.core.function.api.driver.video.IDriveSeatVideoProvider.Event.Loading
|
||||
import com.mogo.eagle.core.function.api.driver.video.IDriveSeatVideoProvider.Event.Playing
|
||||
import com.mogo.eagle.core.network.MoGoRetrofitFactory
|
||||
import com.mogo.eagle.core.utilcode.util.AppStateManager
|
||||
import com.tencent.liteav.basic.log.TXCLog
|
||||
import com.tencent.rtmp.ITXLivePlayListener
|
||||
import com.tencent.rtmp.TXLiveConstants
|
||||
import com.tencent.rtmp.TXLivePlayConfig
|
||||
import com.tencent.rtmp.TXLivePlayer
|
||||
import com.tencent.rtmp.ui.TXCloudVideoView
|
||||
import com.zhjt.mogo_core_function_devatools.driver.video.vo.VideoUrlData
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.Headers
|
||||
import retrofit2.http.Query
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class DriveSeatVideoProviderImpl: IDriveSeatVideoProvider {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "DriveSeatVideoProvider"
|
||||
}
|
||||
|
||||
@Volatile
|
||||
private var target: WeakReference<TXCloudVideoView>? = null
|
||||
|
||||
@Volatile
|
||||
private var timer: Job? = null
|
||||
|
||||
private val scope by lazy { CoroutineScope(Dispatchers.IO + SupervisorJob()) }
|
||||
|
||||
private var data: VideoUrlData? = null
|
||||
|
||||
internal interface IVideoLiveUrlApi {
|
||||
@Headers("Content-Type:application/json;charset=UTF-8")
|
||||
@GET("/eagleEye-mis/camera/monitor/watch/status")
|
||||
suspend fun requestVideoLiveUrl(@Query(value = "numberPlate") numberPlate: String, @Query("cameraType") cameraType: Int, @Query("protocolType") protocolType: Int): BaseResponse<VideoUrlData>
|
||||
}
|
||||
|
||||
|
||||
override suspend fun requestVideoInfo(): VideoUrlData? {
|
||||
val plateNumber = AppConfigInfo.plateNumber
|
||||
if (TextUtils.isEmpty(plateNumber)) {
|
||||
Log.e(TAG, "-- isVideoLiveUsable -- plate number is empty.")
|
||||
return null
|
||||
}
|
||||
val resp = getApi()?.requestVideoLiveUrl(plateNumber, 2, 2) ?: return null
|
||||
Log.e(TAG, "-- isVideoLiveUsable -- receive response: {code: ${resp.code}, msg: ${resp.msg}, result: ${resp.result}}")
|
||||
data = resp.result
|
||||
return resp.result
|
||||
}
|
||||
|
||||
override fun getDriveVideoView(playUrl: String, playCallback: ((Event) -> Unit)?): View? {
|
||||
val activity = AppStateManager.currentActivity() ?: return null
|
||||
val t = target?.get()
|
||||
if (t != null) {
|
||||
return t
|
||||
}
|
||||
val x = TXCloudVideoView(activity)
|
||||
Log.d(TAG, "getDriveVideoView --> $playUrl")
|
||||
x.doOnAttach {
|
||||
Log.d(TAG, "onAttachToWindow --> $playUrl")
|
||||
val player = TXLivePlayer(activity)
|
||||
player.setPlayerView(x)
|
||||
player.setMute(true)
|
||||
TXCLog.setLevel(4)
|
||||
val config = TXLivePlayConfig()
|
||||
config.setConnectRetryCount(30)
|
||||
player.setConfig(config)
|
||||
player.enableHardwareDecode(true)
|
||||
player.startPlay(playUrl, TXLivePlayer.PLAY_TYPE_LIVE_RTMP)
|
||||
player.setPlayListener(object : ITXLivePlayListener {
|
||||
|
||||
override fun onPlayEvent(event: Int, bundle: Bundle?) {
|
||||
Log.d(TAG, "直播信息 => event: $event, playUrl: $playUrl, bundle: $bundle")
|
||||
if (event == TXLiveConstants.PLAY_EVT_PLAY_LOADING) {
|
||||
Log.d(TAG, "play loading...")
|
||||
playCallback?.invoke(Loading)
|
||||
} else if (event == TXLiveConstants.PLAY_EVT_PLAY_BEGIN) {
|
||||
Log.d(TAG, "play begin...")
|
||||
start()
|
||||
playCallback?.invoke(Playing)
|
||||
} else {
|
||||
if (event < 0) {
|
||||
Log.d(TAG, "play failed...$event, bundle: $bundle")
|
||||
stop()
|
||||
playCallback?.invoke(Failed(bundle?.toString() ?: "播放失败"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onNetStatus(bundle: Bundle?) {
|
||||
Log.d(TAG, "直播信息 => onNetStatus -> $bundle")
|
||||
}
|
||||
})
|
||||
|
||||
x.doOnDetach {
|
||||
Log.d(TAG, "-- onDetachedFromWindow ---: $playUrl")
|
||||
try {
|
||||
player.stopPlay(true)
|
||||
stop()
|
||||
} finally {
|
||||
target?.clear()
|
||||
}
|
||||
}
|
||||
}
|
||||
target = WeakReference(x)
|
||||
return x
|
||||
}
|
||||
|
||||
|
||||
override fun getLastData(): VideoUrlData? {
|
||||
return data
|
||||
}
|
||||
|
||||
private fun start() {
|
||||
timer?.cancel()
|
||||
scope.launch {
|
||||
val result = requestVideoInfo()
|
||||
if (result != null) {
|
||||
data = result
|
||||
}
|
||||
delay(5000)
|
||||
}.also {
|
||||
timer = it
|
||||
}
|
||||
}
|
||||
|
||||
private fun stop() {
|
||||
timer?.cancel()
|
||||
}
|
||||
|
||||
private fun getApi(): IVideoLiveUrlApi? {
|
||||
return MoGoRetrofitFactory.getInstanceNoCallAdapter(HostConst.getHost()).create(IVideoLiveUrlApi::class.java)
|
||||
}
|
||||
}
|
||||
@@ -45,11 +45,13 @@ class TakeOverListAdapter(private val context: Context): RecyclerView.Adapter<Ta
|
||||
* 修改元素
|
||||
*/
|
||||
fun notifyRecordItemChanged(info: TakeOverRecordInfo){
|
||||
val pos = data?.indexOf(info)
|
||||
pos?.let {
|
||||
data?.set(pos, info)
|
||||
notifyItemChanged(pos)
|
||||
}
|
||||
try {
|
||||
val pos = data?.indexOf(info)
|
||||
pos?.let {
|
||||
data?.set(pos, info)
|
||||
notifyItemChanged(pos)
|
||||
}
|
||||
}catch (_:Exception){}
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TakeOverRecordHolder {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user