diff --git a/OCH/mogo-och-bus-passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java b/OCH/mogo-och-bus-passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java index dd5398ace9..e6cf83e533 100644 --- a/OCH/mogo-och-bus-passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java +++ b/OCH/mogo-och-bus-passenger/src/jinlvvan/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java @@ -3,7 +3,6 @@ package com.mogo.och.bus.passenger.ui; import android.annotation.SuppressLint; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; -import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; @@ -170,7 +169,7 @@ public class BusPassengerRouteFragment extends } public void updateDriverSn(String sn) { - if (driverMonitorView.isSOPDriverSn(sn)){ + if (driverMonitorView.isSOPDriverSn("F803EB2046PZD00164")){ visibleLiveShadow(); }else { goneLiveShadow(); @@ -180,8 +179,10 @@ public class BusPassengerRouteFragment extends @Override protected void openOrCloseLiveVideo() { if (videoSwitch.isSelected()){ + driverMonitorView.stopLive(); videoSwitch.setSelected(false); }else { + driverMonitorView.startLive(); videoSwitch.setSelected(true); mapAndLiveVideoView.changeToSecondView(); } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/DriverMonitorView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/DriverMonitorView.kt index df6bbbf3c6..5f09fdcb8c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/DriverMonitorView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/DriverMonitorView.kt @@ -2,18 +2,17 @@ package com.mogo.eagle.core.function.hmi.ui.widget import android.app.Application import android.content.Context -import android.os.Handler import android.util.AttributeSet import android.view.LayoutInflater import com.mogo.cloud.live.manager.LiveStreamManagerImpl import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.cloud.trafficlive.api.ITrafficCarLiveCallBack import com.mogo.cloud.trafficlive.api.MoGoAiCloudTrafficLive -import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.widget.RoundConstraintLayout import kotlinx.android.synthetic.main.view_driver_monitor.view.ivNormal import kotlinx.android.synthetic.main.view_driver_monitor.view.liveProgressBar @@ -27,29 +26,18 @@ class DriverMonitorView : RoundConstraintLayout { companion object { private val TAG = "DriverMonitorView" - private var isLived = false - - // TODO SOP演示功能代码,乘客端查看当前车辆上的司机位置监控,请求的是分体机提供的直播信息,这里采用的是硬编码,因为云平台的操作就是这样,没有接口供查询对应关系 - private var sopShowDriverMap = HashMap() } - private val mHandler = Handler() - private val mRunnable = object : Runnable { - override fun run() { - // Do something here - Logger.d( - "${SceneConstant.M_HMI}$TAG", - "检查司机直播……isLived=$isLived 当前车上的司机端SN=${sopShowDriverMap[CallerTelematicManager.getServerToken()]}" - ) - CallerLogger.d( - "${SceneConstant.M_HMI}$TAG", - "检查司机直播……isLived=$isLived 当前车上的司机端SN=${sopShowDriverMap[CallerTelematicManager.getServerToken()]}" - ) - showLive() + // TODO SOP演示功能代码,乘客端查看当前车辆上的司机位置监控,请求的是分体机提供的直播信息,这里采用的是硬编码,因为云平台的操作就是这样,没有接口供查询对应关系 + private var sopShowDriverMap = HashMap() + private var isLived = false - mHandler.postDelayed(this, 10000) // 1 second delay - } - } + // 调用直播传入的司机屏幕SN + private var currentDriverSN = "" + + // 当前直播源的SN,TODO 如果要测试可以使用下面的SN +// private var currentDriverLiveSN = "F803EB2046PZD00164" + private var currentDriverLiveSN = "" private val liveStreamManager by lazy { LiveStreamManagerImpl.getInstance( @@ -83,10 +71,10 @@ class DriverMonitorView : textureViewDriverMonitor.isOpaque = false - liveStreamManager.setLivePushStatusChangeCallback { } - - // TODO SOP演示需求,只有乘客屏幕才会触发这个逻辑 begin + // TODO SOP演示需求,只有乘客屏幕才会触发这个逻辑 ,车上必须配置了分体机作为直播源 begin + // http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=111386656 // 测试数据 + sopShowDriverMap["F803EB2046PZD00164"] = "F803EB2046PZD00164"//凤坤工位旁的分体机 sopShowDriverMap["X202022060289M7N8P"] = "F803EB2046PZD00188"//湘A01733D // key=pad司机屏幕SN,value=分体机SN,value用来调用ZeGo直播服务查看直播,@see MoGoAiCloudTrafficLive.viewDesignativeVehicleLive sopShowDriverMap["20220524733SWT1"] = "F803EB2046PZD00190"//湘D01777D @@ -98,61 +86,93 @@ class DriverMonitorView : // TODO SOP演示需求,只有乘客屏幕才会触发这个逻辑 END // 点击重新连接直播 ivNormal.setOnClickListener { - showLive() + startLive() } - - mHandler.postDelayed(mRunnable, 1000) // 1 second delay - } - - fun isSOPDriverSn(sn: String) :Boolean{ - return sopShowDriverMap.containsKey(sn) } override fun onDetachedFromWindow() { super.onDetachedFromWindow() - mHandler.removeCallbacks(mRunnable) - sopShowDriverMap[CallerTelematicManager.getServerToken()]?.let { - MoGoAiCloudTrafficLive.stopCarLive(it) + if (currentDriverLiveSN.isNotEmpty()) { + MoGoAiCloudTrafficLive.stopCarLive(currentDriverLiveSN) } } - fun showLive() { - if (!isLived) { - sopShowDriverMap[CallerTelematicManager.getServerToken()]?.let { - Logger.d( - "${SceneConstant.M_HMI}$TAG", - "检查司机直播……isLived=$isLived 当前车上的司机端SN=${sopShowDriverMap[CallerTelematicManager.getServerToken()]}" - ) - CallerLogger.d( - "${SceneConstant.M_HMI}$TAG", - "检查司机直播……isLived=$isLived 当前车上的司机端SN=${sopShowDriverMap[CallerTelematicManager.getServerToken()]}" - ) + /** + * 检查传入的司机端所在车辆是否配置了,F车机作为直播源。ture-有,false-没有 + */ + fun isSOPDriverSn(snDriver: String): Boolean { + currentDriverSN = snDriver + // 查找传入的司机端所在车是否配置了F车机作为直播源 + sopShowDriverMap[snDriver]?.let { + // 这里应对的是乘客端切换连接的司机端的情况,正常情况这里不会执行,一个车只有一个司机端 + if (isLived && it != currentDriverLiveSN) { + stopLive() + } + currentDriverLiveSN = it + } ?: let { + // 如果没查到,设置当前车辆为null,并将之前的直播关闭 + stopLive() + currentDriverLiveSN = "" + } + + Logger.d( + "${SceneConstant.M_HMI}$TAG", + "当前车上的司机端SN=${currentDriverSN},直播分体机SN=${currentDriverLiveSN}" + ) + CallerLogger.d( + "${SceneConstant.M_HMI}$TAG", + "当前车上的司机端SN=${currentDriverSN},直播分体机SN=${currentDriverLiveSN}" + ) + return currentDriverLiveSN.isNotEmpty() + } + + + /** + * 打开,司机仓监控直播 + */ + fun startLive() { + if (currentDriverLiveSN.isNotEmpty()) { + liveStreamManager.setLivePushStatusChangeCallback { } + Logger.d( + "${SceneConstant.M_HMI}$TAG", + "检查司机直播……isLived=$isLived 当前车上的司机端SN=${currentDriverSN},直播分体机SN=${currentDriverLiveSN}" + ) + CallerLogger.d( + "${SceneConstant.M_HMI}$TAG", + "检查司机直播……isLived=$isLived 当前车上的司机端SN=${currentDriverSN},直播分体机SN=${currentDriverLiveSN}" + ) + if (!isLived) { MoGoAiCloudTrafficLive.viewDesignativeVehicleLive( - it, + currentDriverLiveSN, textureViewDriverMonitor, carLiveCallBack ) - } ?: let { - //为空又怎么撸 - if (CallerTelematicManager.getServerToken().isNotEmpty()) { - Logger.d( - "${SceneConstant.M_HMI}$TAG", - "检查司机直播……isLived=$isLived 当前车辆SN=${CallerTelematicManager.getServerToken()} 不支持直播" - ) - CallerLogger.d( - "${SceneConstant.M_HMI}$TAG", - "检查司机直播……isLived=$isLived 当前车辆SN=${CallerTelematicManager.getServerToken()} 不支持直播" - ) - // 乘客屏幕连接上了司机屏,但是司机屏不在直播范围内,进行隐藏操作。 - liveListener?.onPlayError() - } + } else { + ToastUtils.showShort("正在直播中") } - // TODO 测试用的 -// MoGoAiCloudTrafficLive.viewDesignativeVehicleLive( -// "F803EB2046PZD00164", -// textureViewDriverMonitor, -// carLiveCallBack -// ) + } else { + ToastUtils.showShort("当前车内没有直播源") + //为空又怎么撸 + Logger.d( + "${SceneConstant.M_HMI}$TAG", + "检查司机直播……isLived=$isLived 当前车辆SN=${currentDriverSN} 不支持直播" + ) + CallerLogger.d( + "${SceneConstant.M_HMI}$TAG", + "检查司机直播……isLived=$isLived 当前车辆SN=${currentDriverSN} 不支持直播" + ) + // 乘客屏幕连接上了司机屏,但是司机屏不在直播范围内,进行隐藏操作。 + liveListener?.onPlayError() + } + } + + /** + * 关闭,司机仓监控直播 + */ + fun stopLive() { + isLived = false + if (currentDriverLiveSN.isNotEmpty()) { + MoGoAiCloudTrafficLive.stopCarLive(currentDriverLiveSN) } } @@ -170,20 +190,20 @@ class DriverMonitorView : private val carLiveCallBack = object : ITrafficCarLiveCallBack { override fun onLive(liveSn: String?) { - Logger.d("${SceneConstant.M_HMI}$TAG", "onLive:$liveSn") + Logger.i("${SceneConstant.M_HMI}$TAG", "onLive:$liveSn") CallerLogger.d("${SceneConstant.M_HMI}$TAG", "onLive:$liveSn") } override fun onFirstFrame() { - Logger.d("${SceneConstant.M_HMI}$TAG", "onFirstFrame:isFirstPage") + Logger.i("${SceneConstant.M_HMI}$TAG", "onFirstFrame:isFirstPage") CallerLogger.d("${SceneConstant.M_HMI}$TAG", "onFirstFrame:isFirstPage") isLived = true refreshView(isLived) } override fun onDisConnect() { - Logger.e("${SceneConstant.M_HMI}$TAG", "onDisConnect") - CallerLogger.e("${SceneConstant.M_HMI}$TAG", "onDisConnect") + Logger.w("${SceneConstant.M_HMI}$TAG", "onDisConnect") + CallerLogger.w("${SceneConstant.M_HMI}$TAG", "onDisConnect") isLived = false refreshView(isLived) } @@ -196,13 +216,15 @@ class DriverMonitorView : } override fun onPlaying() { - Logger.e("${SceneConstant.M_HMI}$TAG", "onPlaying……") + Logger.i("${SceneConstant.M_HMI}$TAG", "onPlaying……") + CallerLogger.i("${SceneConstant.M_HMI}$TAG", "onPlaying……") isLived = true refreshView(isLived) } override fun onPlaRequesting() { - Logger.e("${SceneConstant.M_HMI}$TAG", "onPlaRequesting……") + Logger.w("${SceneConstant.M_HMI}$TAG", "onPlaRequesting……") + CallerLogger.w("${SceneConstant.M_HMI}$TAG", "onPlaRequesting……") isLived = true refreshView(isLived) }