From 378a161acbfa3c05f0066c8b1f237507c1b560bc Mon Sep 17 00:00:00 2001 From: donghongyu Date: Fri, 31 Mar 2023 13:06:34 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=8Cdev=5Frobobus-d=5F230322=5F3.0.0?= =?UTF-8?q?=E3=80=8D=201=E3=80=81=E5=90=88=E5=B9=B6=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=202=E3=80=81=E4=BF=AE=E5=A4=8D=E4=B9=98?= =?UTF-8?q?=E5=AE=A2=E7=AB=AF=E6=89=93=E5=8C=85=E4=B8=8D=E8=83=BD=E8=BF=90?= =?UTF-8?q?=E8=A1=8Cbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/BusPassengerBaseFragment.java | 14 ++ .../main/res/layout/bus_p_base_fragment.xml | 37 ++++ .../src/main/res/values/dimens.xml | 3 + .../fPadLenovoOchBusPassenger.gradle | 2 +- .../fPadLenovoOchTaxiPassenger.gradle | 2 +- .../hmi/ui/widget/DriverMonitorView.kt | 204 ++++++++++++++++++ .../src/main/res/drawable/bus_picture_nor.png | Bin 0 -> 5248 bytes .../main/res/drawable/icon_loading_live.png | Bin 0 -> 3030 bytes .../main/res/layout/view_driver_monitor.xml | 52 +++++ 9 files changed, 312 insertions(+), 2 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/DriverMonitorView.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bus_picture_nor.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/icon_loading_live.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_driver_monitor.xml diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java index fa686d846f..a14085ab59 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java @@ -22,6 +22,7 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.bus.passenger.R; import com.mogo.och.bus.passenger.constant.BusPassengerConst; import com.mogo.och.common.module.utils.NumberFormatUtil; +import com.mogo.och.common.module.wigets.OCHBorderShadowLayout; /** * Created on 2022/3/31 @@ -39,6 +40,8 @@ public abstract class BusPassengerBaseFragment + + + + + + + + + + + + 55dp 40dp + 495dp + 309dp + 584dp 550dp \ No newline at end of file diff --git a/app/productFlavors/fPadLenovoOchBusPassenger.gradle b/app/productFlavors/fPadLenovoOchBusPassenger.gradle index aa50f49580..97b39ec2b2 100644 --- a/app/productFlavors/fPadLenovoOchBusPassenger.gradle +++ b/app/productFlavors/fPadLenovoOchBusPassenger.gradle @@ -43,7 +43,7 @@ project.android.productFlavors { buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true' // 构建 是否支持多屏异显异交互 - buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true' + buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' //Bus不能启动自驾的档位 buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_N);add(chassis.Chassis.GearPosition.GEAR_R);}}' diff --git a/app/productFlavors/fPadLenovoOchTaxiPassenger.gradle b/app/productFlavors/fPadLenovoOchTaxiPassenger.gradle index 5c37382209..cb943e5571 100644 --- a/app/productFlavors/fPadLenovoOchTaxiPassenger.gradle +++ b/app/productFlavors/fPadLenovoOchTaxiPassenger.gradle @@ -45,7 +45,7 @@ project.android.productFlavors { buildConfigField 'boolean', 'IS_CAR_MODEL_CHANGE', 'true' // 构建 是否支持多屏异显异交互 - buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'true' + buildConfigField 'boolean', 'IS_MULTI_DISPLAY', 'false' //Taxi不能启动自驾的档位 buildConfigField 'java.util.Set', 'UNABLE_LAUNCH_AUTOPILOT_GEAR', 'new java.util.HashSet(){{add(chassis.Chassis.GearPosition.GEAR_P);add(chassis.Chassis.GearPosition.GEAR_R);}}' 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 new file mode 100644 index 0000000000..58afe8435b --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/DriverMonitorView.kt @@ -0,0 +1,204 @@ +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.widget.RoundConstraintLayout +import kotlinx.android.synthetic.main.view_camera_list.view.* +import kotlinx.android.synthetic.main.view_driver_monitor.view.* + +/** + * 乘客端查看当前车辆驾驶舱的司机监控View + */ +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() + + mHandler.postDelayed(this, 10000) // 1 second delay + } + } + + private val liveStreamManager by lazy { + LiveStreamManagerImpl.getInstance( + context.applicationContext as Application?, + MoGoAiCloudClientConfig.getInstance().sn, + false + ) + } + + constructor(context: Context?) : super(context) { + initView(context) + } + + constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) { + initView(context) + } + + constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super( + context, + attrs, + defStyleAttr + ) { + initView(context) + } + + private fun initView(context: Context?) { + LayoutInflater.from(context) + .inflate(R.layout.view_driver_monitor, this, true) + + textureViewDriverMonitor.isOpaque = false + + liveStreamManager.setLiveStatusChangeCallback { + textureView + .post { + handleSnLiveStatus(it) + } + } + + // TODO SOP演示需求,只有乘客屏幕才会触发这个逻辑 begin + // 测试数据 + sopShowDriverMap["X202022060289M7N8P"] = "F803EB2046PZD00188"//湘A01733D + // key=pad司机屏幕SN,value=分体机SN,value用来调用ZeGo直播服务查看直播,@see MoGoAiCloudTrafficLive.viewDesignativeVehicleLive + sopShowDriverMap["20220524733SWT1"] = "F803EB2046PZD00190"//湘D01777D + sopShowDriverMap["20211110K7EJKPG"] = "F803EB2046PZD00188"//湘A01733D + sopShowDriverMap["20211120H342O9Z"] = "F803EB2046PZD00167"//未知 + sopShowDriverMap["20211112X2RI32A"] = "F803EB2046PZD00274"//京A40776D + sopShowDriverMap["202204085X310A1"] = "F803EB2046PZD00263"//湘D09005D + + // TODO SOP演示需求,只有乘客屏幕才会触发这个逻辑 END + // 点击重新连接直播 + ivNormal.setOnClickListener { + showLive() + } + + mHandler.postDelayed(mRunnable, 1000) // 1 second delay + } + + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + mHandler.removeCallbacks(mRunnable) + sopShowDriverMap[CallerTelematicManager.getServerToken()]?.let { + MoGoAiCloudTrafficLive.stopCarLive(it) + } + } + + 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()]}" + ) + MoGoAiCloudTrafficLive.viewDesignativeVehicleLive( + it, + textureViewDriverMonitor, + carLiveCallBack + ) + } +// MoGoAiCloudTrafficLive.viewDesignativeVehicleLive( +// "F803EB2046PZD00190", +// textureViewDriverMonitor, +// carLiveCallBack +// ) + } + } + + private fun refreshView(lived: Boolean) { + if (lived) { + textureViewDriverMonitor.visibility = VISIBLE + liveProgressBar.visibility = GONE + tvLoadingHit.visibility = GONE + } else { + textureViewDriverMonitor.visibility = GONE + liveProgressBar.visibility = VISIBLE + tvLoadingHit.visibility = VISIBLE + } + } + + private fun handleSnLiveStatus(status: Int) { + when (status) { + 0 -> {// 正在直播 + isLived = true + } + + 1 -> {// 直播已停止 + isLived = false + } + + 2 -> {// 直播强制结束 + isLived = false + } + } + refreshView(isLived) + + Logger.d("${SceneConstant.M_HMI}$TAG", "isLived:$isLived") + CallerLogger.d("${SceneConstant.M_HMI}$TAG", "isLived:$isLived") + } + + private val carLiveCallBack = object : ITrafficCarLiveCallBack { + override fun onLive(liveSn: String?) { + Logger.d("${SceneConstant.M_HMI}$TAG", "onLive:$liveSn") + CallerLogger.d("${SceneConstant.M_HMI}$TAG", "onLive:$liveSn") + isLived = true + refreshView(isLived) + } + + override fun onFirstFrame() { + Logger.d("${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") + isLived = false + refreshView(isLived) + } + + override fun onError(errorMsg: String?) { + Logger.e("${SceneConstant.M_HMI}$TAG", "onError msg is:${errorMsg}") + CallerLogger.e("${SceneConstant.M_HMI}$TAG", "onError msg is:${errorMsg}") + isLived = false + refreshView(isLived) + } + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bus_picture_nor.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bus_picture_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..45ae53aa8bbfdb9feb356d927555568a80db6627 GIT binary patch literal 5248 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/icon_loading_live.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/icon_loading_live.png new file mode 100644 index 0000000000000000000000000000000000000000..df4c5965c1314f4acd25deff71ed6c711ac74fc0 GIT binary patch literal 3030 zcmV;{3n}!8P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91RG@rvNI+^@7YIoYB?y(YN(BMhKxj*v(DYD>#HLb9QAtEXO9(Uql&EP! z)l#J?k&;l-R0>4U1QW;LgUciw#rOb&7khX5&Ehrd^*d(XTjOVYN3!3%ng9Ri|G%C2 z=YEV_9)cHmDUZ-sIML^#L_;-3jfmIye6;t-aCX9N>NB?~6xS!%#0w)~`YGP0$J2D4 zdor@<>B?+&Rwu7dl3WRB;YI!>)=q1INTww!oErUpdaP;$`^b{^CJ?v|(BcL@k$2Em z*dCC!pHs8PON*-W*eB9Fy+o+>l3ZJ2L!4{WK_M{9gDFa4G^`^+Pl#w=2Uh|5(s`PL z4yVu#C}?VT1kdrwc6d|C<0?P_=4>a%VHDtq-$~hVUUvb?>GN^L>^!+cemi9*^SBC7 z#%M&cf=cgB`IQROCw3K}X!5Q4YD%X%<(DqVh|p`4A)8)uh?hhdO+xJ&8RgW5nan36 zGHCz)39Lm{Mi(8Udg3&)>s>X%=#(l;s_AV5I^i(CD;lMTJBU6D5D5M&762+;Xr*Xz z1>f!S(&nm(?2N3^=&An$+Aqk`>(B}QJ`KtP`?5;z4@c;i0Pq`@nn&p}3(zlWC$fE( zv>>>xi4VULroSUPM25Z_4X1O#TWJ1n#=_mwZ}N+>4-I$F8YwV^AsS^1m```zB9$NI>3M|4Kcq1LOuAK7>8NOo$>}4?RlA(>$FpW0X z6|g<=cRSBeh-)(+yuNl$Eq~EcU4{dIvf(WM=kobXk4!VK^&r<_qth0BJkt71>dnAjBk=2c2+cPwp4|85Z!YS}yH;e;jPPI^cYxXF*&ncK?3wZX$ zt28DKrYM|8iM2#2f7){O5r=dQEk49oz@qQPthM~RtUNe22<|zXz3dET7TX;NVD7Ou%d?7g8@_ zVdOXl>+eh%L+`4rU@L3X&l$P_TC#zcbhP7~C8IJUyTmNW6Q$oC{W&{eL^GJvy8sP7 z&F{oU)mkikST6a4DT3O&w)%0VwB0)xfQ|tgtCFFkJLUQcPb=-uir++ z@?Oab8m+a_2pmJoMAd52y8+I$+%9i_;j74@Vr(f7HPg49QAybkc(x{nMrMRoc_^sZ zil)Ek!?jtSNf3MZkt>vk?e^F>)3(iM_QP#6_a8sGxL7iqwdRllnzyvV`7e%8ZjppT)A>HCm0tf&`l6XcHh`KbUG} zG5}`p-2fGYWv_C-m`;irkQlUsU^o^{S}@N%f#*BIXI3m?Qo{(dg420v1kwnk5lADD zMj(wq8i6zdgBpPz<4`+j%zKpQUcH9JRh$pa9!ckSh6er~lMzm~0sR^-oQA{nUEGSA zi^Y|3T?J^k(9P)}z4PL<3(#51`IoVc`YSMJo8rW1Uq*nQz}1z0u?Q_T zzw zYK8`AH9*FlqUPy%%BGG2<^y=}Pt=t~x4`i`3VuPsdaDvqhF6lUUM1EX3sS_Bt0 zR!=N;Gn%yky9YI7Qf zPi`)`{fE5A;RYkUr2(C_k{6-yX-0yq(%~k)ZAEi4^FKX-&eVLF^13>l0vB85b(aPd z1EHCY3}!TS<+D8CNJa{o(Wy?C6^CWa;M8S&m<+u%pjh(P^)oVs#Ax7mYiq0z3`om! zKqx-cg3d?jJVA3ijgcu*8c_6tmd6~e3PiJaEW@e{$^0xyx-K%D2$ABE1{7y@E_6w^ z8OiiJmtnK$Zfx_5pod0kCk8V}>b|Nppy-e)x@o2Og3}lEyAsY(Dzc}PTpT+@hjc<# zC}^*aE}(NV^yasT6C~XF8G8TZ8EVF`Ny<4Vu*RYoD8HGUCi7mn6d$;b&^<7!6mDlI zYCt3Q#}DIUPXDah#{MfKLyyLz(Jq|WUWLBF5(7-FckK^%l@?q9Pd?B3qkL5Y8 zQ-bHRcLd${);iWK%R6NW&&Riuegpa`Mm$h{Zy<|8m7AFU0R$t)&h(-sd=?IO-fKpN zuT37R*}=A%(In={H+gW4yo>&X-Ou+E1<1r<_!?y}IcADqDHjH^^%@uK>6 zxiX+aOR=EP@FqO~&%OlyMgL?kql5Ui{D!wSu_|fHK-lRsH>mIkTA!aDII@*htMa9q z-qIoK71(+4>&3+(zVp->)Kq-o7Bi1L_>VR$D4gbgdT-B0R;R~nl_okMD;mB0_At#w zdjAA8ZqW7+YeW3soqzFUM^7}FQus#YfSx~gX+W7V#SBWFQi{vg6(@#9x)~OUn$6*y zg;?cm*8vKJdiJ;yW}$}K;*$`qMB+L?#h_iuf*Ztk`EE!^LCkf41~htI)h_tm2tIV= zii5wd1N7q;*arY;uL`KB)jR7pv3eDr-lBCKpu$iwoy1VAR?28b2Xbf7Gg7oSfykAB zin)1KB=&h?!)6?7<{JGucP6cLvhAB{jG>piL+L|2Cga7~l07*qoM6N<$g3ln0`~Uy| literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_driver_monitor.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_driver_monitor.xml new file mode 100644 index 0000000000..11cbf18902 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_driver_monitor.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + \ No newline at end of file