From 8357a7933e3dfbd88f026b3a2155c20d69f336f2 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Thu, 21 Nov 2024 16:51:20 +0800 Subject: [PATCH 1/4] =?UTF-8?q?[6.8.0]=20[fea]=20[=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E6=B5=81=E5=B9=BF=E5=91=8A]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/module/biz/media/IMediaDispatch.kt | 2 ++ .../common/module/biz/media/MediaManager.kt | 14 ++++++++ .../wigets/media/MediaPlayerFragment.kt | 15 ++++++++ .../weaknet/passenger/ui/PM2BaseFragment.kt | 35 +++++++++++++++++++ .../src/main/res/m2/values/ids.xml | 4 +++ 5 files changed, 70 insertions(+) create mode 100644 OCH/shuttle/passenger_weaknet/src/main/res/m2/values/ids.xml diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/media/IMediaDispatch.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/media/IMediaDispatch.kt index d779b9a0a2..3fa8583546 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/media/IMediaDispatch.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/media/IMediaDispatch.kt @@ -4,4 +4,6 @@ import com.mogo.och.common.module.wigets.media.MediaItem interface IMediaDispatch { fun diapatchMedia(list :MutableList) + fun setMediaPause(){} + fun setMediaResume(){} } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/media/MediaManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/media/MediaManager.kt index 5c2cb4c178..2e8bdfd3b3 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/media/MediaManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/media/MediaManager.kt @@ -12,4 +12,18 @@ object MediaManager : CallerBase() { } } + fun setMediaResume(){ + M_LISTENERS.forEach { + val listener = it.value + listener.setMediaResume() + } + } + + fun setMediaPause(){ + M_LISTENERS.forEach { + val listener = it.value + listener.setMediaPause() + } + } + } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt index e4f2d06745..1f873ab568 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerFragment.kt @@ -12,6 +12,7 @@ import com.mogo.och.common.module.R import com.mogo.och.common.module.biz.media.IMediaDispatch import com.mogo.och.common.module.biz.media.MediaManager import com.mogo.och.common.module.manager.download.DownloadManager +import com.mogo.och.common.module.manager.loop.BizLoopManager import com.mogo.och.common.module.utils.RxUtils import com.shuyu.gsyvideoplayer.GSYVideoManager import io.reactivex.disposables.Disposable @@ -113,6 +114,20 @@ class MediaPlayerFragment : fisrtData = RxUtils.createSubscribe(3_000) {} setHightPriorityMediaItem(list) } + + override fun setMediaPause() { + super.setMediaPause() + BizLoopManager.runInMainThread{ + imageVideoRotationView.setPause() + } + } + + override fun setMediaResume() { + super.setMediaResume() + BizLoopManager.runInMainThread { + imageVideoRotationView.setResume() + } + } } class MediaPlayerPresenter(view: MediaPlayerFragment?) : diff --git a/OCH/shuttle/passenger_weaknet/src/main/java/m2/com/mogo/och/shuttle/weaknet/passenger/ui/PM2BaseFragment.kt b/OCH/shuttle/passenger_weaknet/src/main/java/m2/com/mogo/och/shuttle/weaknet/passenger/ui/PM2BaseFragment.kt index 3e18fa7aee..40dcabd118 100644 --- a/OCH/shuttle/passenger_weaknet/src/main/java/m2/com/mogo/och/shuttle/weaknet/passenger/ui/PM2BaseFragment.kt +++ b/OCH/shuttle/passenger_weaknet/src/main/java/m2/com/mogo/och/shuttle/weaknet/passenger/ui/PM2BaseFragment.kt @@ -1,11 +1,19 @@ package com.mogo.och.shuttle.weaknet.passenger.ui +import android.view.View +import android.view.ViewGroup +import android.widget.FrameLayout import com.mogo.commons.mvp.MvpFragment import com.mogo.eagle.core.utilcode.util.AppUtils +import com.mogo.och.common.module.biz.media.MediaManager +import com.mogo.och.common.module.manager.loop.BizLoopManager +import com.mogo.och.common.module.manager.transform.OchTransform +import com.mogo.och.common.module.manager.transform.OchTransformDispatch import com.mogo.och.shuttle.weaknet.passenger.R import com.mogo.och.shuttle.weaknet.passenger.presenter.PM2Presenter import com.mogo.och.common.module.wigets.media.MediaPlayerFragment import kotlinx.android.synthetic.main.shuttle_p_m2_fragment.tv_shuttle_b2_p_version +import kotlinx.android.synthetic.main.shuttle_p_m2_fragment.video_fragment /** @@ -19,6 +27,27 @@ class PM2BaseFragment : private var hdMapFragment : PM2HPMapFragment? = null private var mediaFragment : MediaPlayerFragment? = null + private val ochTransform = object : OchTransformDispatch{ + override fun setVideoView(target: View?) { + super.setVideoView(target) + if(target!=null){ + BizLoopManager.runInMainThread{ + target.id = R.id.video_show + val params = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT) + video_fragment.addView(target,params) + MediaManager.setMediaPause() + } + }else{ + BizLoopManager.runInMainThread{ + findViewById(R.id.video_show)?.let { + video_fragment.removeView(it) + MediaManager.setMediaResume() + } + } + } + } + } + override fun getLayoutId(): Int { return R.layout.shuttle_p_m2_fragment } @@ -31,6 +60,12 @@ class PM2BaseFragment : tv_shuttle_b2_p_version.text = "版本:${AppUtils.getAppVersionName()}" //隐藏小地图 initFragment() + OchTransform.addListener(TAG,ochTransform) + } + + override fun onDestroy() { + OchTransform.removeListener(TAG) + super.onDestroy() } /** diff --git a/OCH/shuttle/passenger_weaknet/src/main/res/m2/values/ids.xml b/OCH/shuttle/passenger_weaknet/src/main/res/m2/values/ids.xml new file mode 100644 index 0000000000..04d4edf365 --- /dev/null +++ b/OCH/shuttle/passenger_weaknet/src/main/res/m2/values/ids.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From e751ea237d59b8aedd6da71b8b8db630d4fd7109 Mon Sep 17 00:00:00 2001 From: donghongyu-pc Date: Thu, 21 Nov 2024 17:05:33 +0800 Subject: [PATCH 2/4] =?UTF-8?q?[6.8.0]=201=E3=80=81Routing=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=BB=91=E5=90=8D=E5=8D=95=E7=82=B9=E7=9A=84=E4=BC=A0?= =?UTF-8?q?=E5=85=A5=E3=80=82=202=E3=80=81sendTrajectoryDownloadReq?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A=203=E3=80=81=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0TODO=20=E9=9C=80=E8=A6=81=20=E4=BA=9A=E5=9D=A4?= =?UTF-8?q?=E8=A1=A5=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/magic/mogo/och/charter/model/DriverM1Model.kt | 5 +++++ .../charter/passenger/model/CharterPassengerModel.kt | 5 +++++ .../main/java/com/mogo/och/taxi/model/TaxiModel.java | 5 +++++ .../mogo/och/taxi/passenger/model/AutopilotManager.kt | 5 +++++ .../mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt | 5 +++++ .../och/unmanned/passenger/model/AutopilotManager.kt | 5 +++++ .../core/data/autopilot/AutopilotControlParameters.kt | 11 ++++++++++- .../api/autopilot/IMoGoAutopilotControlProvider.kt | 3 +++ .../call/autopilot/CallerAutoPilotControlManager.kt | 3 ++- 9 files changed, 45 insertions(+), 2 deletions(-) diff --git a/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/model/DriverM1Model.kt b/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/model/DriverM1Model.kt index 01ddc11818..73e78b070b 100644 --- a/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/model/DriverM1Model.kt +++ b/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/model/DriverM1Model.kt @@ -597,6 +597,11 @@ class DriverM1Model { parameters.endLatLon = AutopilotControlParameters.AutoPilotLonLat(mCurrentOrder?.wgs84Lat!!, mCurrentOrder?.wgs84Lon!!) parameters.vehicleType = VEHICLE_TYPE + + // TODO 这里需要增加传入 白名单点列表、黑名单点列表,顺序按照服务端传入顺序为准。 + //parameters.wayLatLons + //parameters.blackLatLons + if (parameters.autoPilotLine == null) { parameters.autoPilotLine = AutopilotControlParameters.AutoPilotLine( mCurrentOrder!!.lineId.toLong(), mCurrentOrder!!.lineName, diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/CharterPassengerModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/CharterPassengerModel.kt index 45132b76a3..86b0c073f0 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/CharterPassengerModel.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/CharterPassengerModel.kt @@ -1190,6 +1190,11 @@ object CharterPassengerModel { parameters.endName = PinYinUtil.getPinYinHeadChar(orderInfo.siteName) parameters.startLatLon = AutoPilotLonLat(startWgsLat, startWgsLon) parameters.endLatLon = AutoPilotLonLat(endWgsLat, endWgsLon) + + // TODO 这里需要增加传入 白名单点列表、黑名单点列表,顺序按照服务端传入顺序为准。 + //parameters.wayLatLons + //parameters.blackLatLons + locusInfo?.let { locus -> if (parameters.autoPilotLine == null) { parameters.autoPilotLine = AutoPilotLine( diff --git a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/model/TaxiModel.java b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/model/TaxiModel.java index ce06a4d692..a6b9bbf141 100644 --- a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/model/TaxiModel.java +++ b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/model/TaxiModel.java @@ -1013,6 +1013,11 @@ public class TaxiModel { parameters.endName = PinYinUtil.getPinYinHeadChar(mCurrentOCHOrder.endSiteAddr); // 终点名称拼音首字母大写:科学城C区三号门(KXCCQSHM) parameters.startLatLon = new AutopilotControlParameters.AutoPilotLonLat(startWgsLat, startWgsLon); parameters.endLatLon = new AutopilotControlParameters.AutoPilotLonLat(endWgsLat, endWgsLon); + + // TODO 这里需要增加传入 白名单点列表、黑名单点列表,顺序按照服务端传入顺序为准。 + //parameters.wayLatLons + //parameters.blackLatLons + if (parameters.autoPilotLine == null) { parameters.autoPilotLine = new AutopilotControlParameters.AutoPilotLine( mCurrentOCHOrder.lineId, mCurrentOCHOrder.lineName, diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt index 63d4d50ac6..a4c70233e1 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt @@ -161,6 +161,11 @@ object AutopilotManager : IOchAutopilotStatusListener { parameters.startLatLon = AutopilotControlParameters.AutoPilotLonLat(startWgsLat, startWgsLon) parameters.endLatLon = AutopilotControlParameters.AutoPilotLonLat(endWgsLat, endWgsLon) + + // TODO 这里需要增加传入 白名单点列表、黑名单点列表,顺序按照服务端传入顺序为准。 + //parameters.wayLatLons + //parameters.blackLatLons + if (parameters.autoPilotLine == null) { parameters.autoPilotLine = AutopilotControlParameters.AutoPilotLine( TaxiPassengerModel.currentOCHOrder!!.lineId, diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt index eb40d5102b..12800e9511 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt @@ -1288,6 +1288,11 @@ object TaxiTaskModel { parameters.startLatLon = AutopilotControlParameters.AutoPilotLonLat(startWgsLat, startWgsLon) parameters.endLatLon = AutopilotControlParameters.AutoPilotLonLat(endWgsLat, endWgsLon) + + // TODO 这里需要增加传入 白名单点列表、黑名单点列表,顺序按照服务端传入顺序为准。 + //parameters.wayLatLons + //parameters.blackLatLons + if (parameters.autoPilotLine == null) { parameters.autoPilotLine = AutopilotControlParameters.AutoPilotLine( mCurrentTaskTrajectory!!.lineId, diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/model/AutopilotManager.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/model/AutopilotManager.kt index b057c3d6c2..9e1ba3b797 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/model/AutopilotManager.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/model/AutopilotManager.kt @@ -153,6 +153,11 @@ object AutopilotManager : IOchAutopilotStatusListener { parameters.startLatLon = AutopilotControlParameters.AutoPilotLonLat(startWgsLat, startWgsLon) parameters.endLatLon = AutopilotControlParameters.AutoPilotLonLat(endWgsLat, endWgsLon) + + // TODO 这里需要增加传入 白名单点列表、黑名单点列表,顺序按照服务端传入顺序为准。 + //parameters.wayLatLons + //parameters.blackLatLons + if (parameters.autoPilotLine == null) { if (TaxiPassengerModel.currentLineId != null && TaxiPassengerModel.currentTrajectoryInfo != null diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotControlParameters.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotControlParameters.kt index 4272ab7dd5..321eb2de06 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotControlParameters.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotControlParameters.kt @@ -43,12 +43,20 @@ fun AutopilotControlParameters.toRouteInfo(): MessagePad.RouteInfo { endLoc.latitude = it.lat endLoc.longitude = it.lon } + // Routing算路白名单点赋值 this.wayLatLons?.forEach { val locBuilder = MessagePad.Location.newBuilder() locBuilder.latitude = it.lat locBuilder.longitude = it.lon routeInfo.addWayPoints(locBuilder.build()) } + // Routing算路黑名单点赋值 + this.blackLatLons?.forEach { + val locBuilder = MessagePad.Location.newBuilder() + locBuilder.latitude = it.lat + locBuilder.longitude = it.lon + routeInfo.addBlackPoints(locBuilder.build()) + } if (this.routeID > 0) { routeInfo.routeID = this.routeID } @@ -61,7 +69,7 @@ fun AutopilotControlParameters.toRouteInfo(): MessagePad.RouteInfo { routeInfo.startLocation = startLoc.build() routeInfo.endLocation = endLoc.build() - //20240523 用于表示判断是否是站点下单。默认false:起点下单,接管下单; true: 中间站点下单 + // TODO 20240523 用于表示判断是否是站点下单。默认false:起点下单,接管下单; true: 中间站点下单 //routeInfo.isStation = false val line = MessagePad.Line.newBuilder() @@ -121,6 +129,7 @@ class AutopilotControlParameters { @JvmField var startLatLon: AutoPilotLonLat? = null + // Bus 需要将中间站点填充进去(运营平台完成此步骤) @JvmField var wayLatLons: List? = null // Routing 给算路引擎使用的经停点列表,不是真正的要停车 diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt index 5441e4b38c..c50de87886 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutopilotControlProvider.kt @@ -57,6 +57,9 @@ interface IMoGoAutopilotControlProvider : IMoGoFunctionServerProvider { /** * 发送 轨迹下载请求 + * + * @param autoPilotLine 线路相关参数详情见PB message_pad.proto -> Line + * @param routeInfo 20240523 进行自动算路,务必下单时候携带自动驾驶路径信息,否则可不填! */ fun sendTrajectoryDownloadReq(autoPilotLine: AutopilotControlParameters.AutoPilotLine, routeInfo: MessagePad.RouteInfo?) diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt index 87c791c4b6..169954dfbc 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt @@ -204,7 +204,7 @@ object CallerAutoPilotControlManager { } /** - * 发送 轨迹下载请求 + * 发送 轨迹下载请求。带有Routing的参数,让MAP进行离线算路。 */ fun sendTrajectoryDownloadReq(autopilotControlParameters: AutopilotControlParameters) { if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { @@ -216,6 +216,7 @@ object CallerAutoPilotControlManager { /** * 发送 轨迹下载请求 + * @param autoPilotLine 启动算路参数 */ fun sendTrajectoryDownloadReq(autoPilotLine: AutopilotControlParameters.AutoPilotLine) { if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { From 9c786be862d81cc2ee02e56807b6d935d8ccc9d1 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Thu, 21 Nov 2024 17:25:03 +0800 Subject: [PATCH 3/4] =?UTF-8?q?[6.8.0]=E4=B8=80=E9=94=AE=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?Bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/eagle/core/function/hmi/bone/tab/ReportTypeView.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/ReportTypeView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/ReportTypeView.kt index 46703c5fa7..28832c51a4 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/ReportTypeView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/ReportTypeView.kt @@ -173,6 +173,7 @@ class ReportTypeView @JvmOverloads constructor( reportTypeGroup.visibility = View.GONE tvReportSuccess.visibility = View.GONE tvOneClickReportTitle.text = String.format(resources.getString(R.string.identified_vehicle_malfunction),5) + hasReportOperate = false oneClickTimer?.cancel() oneClickTimer = object : CountDownTimer(5000, 1000) { override fun onTick(count: Long) { @@ -186,12 +187,14 @@ class ReportTypeView @JvmOverloads constructor( if(!hasReportOperate){ ThreadUtils.runOnUiThread { this@ReportTypeView.visibility = View.GONE + clickListener?.closeReportView() } } } } oneClickTimer?.start() //请求一键上报故障码 + level = 1 CallerDevaToolsManager.getCategories(BadCaseConfig.tenantId,level,0,4,1) } From 74f37d366ae10019c5ec97713634b9940d388e76 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Thu, 21 Nov 2024 17:57:48 +0800 Subject: [PATCH 4/4] =?UTF-8?q?[6.8.0]=E5=86=B7=E5=90=AF=E5=8A=A8=E4=B8=89?= =?UTF-8?q?=E6=9C=9F=E8=BF=9B=E5=BA=A6=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmi/ui/widget/ColdStartProcessView.kt | 175 +++++++++++++----- 1 file changed, 127 insertions(+), 48 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ColdStartProcessView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ColdStartProcessView.kt index 405861fa08..f66deb96bc 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ColdStartProcessView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ColdStartProcessView.kt @@ -1,7 +1,6 @@ package com.mogo.eagle.core.function.hmi.ui.widget import android.content.Context -import android.graphics.drawable.Drawable import android.graphics.drawable.TransitionDrawable import android.os.CountDownTimer import android.text.TextUtils @@ -14,8 +13,10 @@ import androidx.core.content.ContextCompat import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.api.autopilot.IMoGoColdStartStateListener import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener +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.CallerColdStartStateListenerManager +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.util.FrameAnimatorContainerUtils @@ -45,6 +46,8 @@ class ColdStartProcessView @JvmOverloads constructor( const val TAG = "ColdStartProcessView" const val LOAD_SSM_WAITING_TIME = 180000L //SSM加载超时等待时间 const val COLD_START_WAITING_TIME = 600000L //冷启动超时等待时间 + const val COLD_START_SUCCESS_SHOW_TIME = 3000L //冷启动成功视图展示时长 + const val COLD_START_SUCCESS_TICK_TIME = 500L //冷启动成功视图呼吸时长 } private var ipcConnectStatus = false //连接域控状态,默认是未连接 @@ -62,6 +65,9 @@ class ColdStartProcessView @JvmOverloads constructor( private var coldStartProcessNormalAnim: FrameAnimatorContainerUtils ?= null private var coldStartProcessAbnormalAnim: FrameAnimatorContainerUtils ?= null + private var transition: TransitionDrawable ?= null + private var coldStartSuccessTimer: CountDownTimer?= null //冷启动成功动画倒计时 + init { LayoutInflater.from(context).inflate(R.layout.view_cold_start_process, this, true) initView() @@ -72,37 +78,17 @@ class ColdStartProcessView @JvmOverloads constructor( coldStartProcessAbnormalAnim = FrameAnimatorContainerUtils(R.array.cold_start_process_abnormal,40,ivColdStartProcess) - val transition = TransitionDrawable( + transition = TransitionDrawable( arrayOf( ContextCompat.getDrawable(context, R.drawable.icon_cold_start_success_01), // 当前图片 ContextCompat.getDrawable(context, R.drawable.icon_cold_start_success_02) // 要渐变到的图片 ) ) ivColdStartProcess.setImageDrawable(transition) - transition.isCrossFadeEnabled = true - var tag = true - val testTimer = object: CountDownTimer(30000,500){ - override fun onTick(millisUntilFinished: Long) { - ThreadUtils.runOnUiThread { - tag = if(tag){ - transition.startTransition(500) - false - }else{ - transition.reverseTransition(500) - true - } - } - } + transition?.isCrossFadeEnabled = true - override fun onFinish() { - ThreadUtils.runOnUiThread { - this@ColdStartProcessView.visibility = View.GONE - } - } - - } ivColdStartProcess.setOnClickListener { - testTimer.start() + CallerHmiManager.showColdStartWindow() } } @@ -138,17 +124,10 @@ class ColdStartProcessView @JvmOverloads constructor( ) { if(status == AdasConstants.IpcConnectionStatus.CONNECTED){ //域控连接成功 - if(coldStartProcessAbnormalAnim?.isPlaying() == true){ - coldStartProcessAbnormalAnim?.stop() - } - coldStartProcessNormalAnim?.start() - + coldStartNormalView() }else{ //域控连接失败 - if(coldStartProcessNormalAnim?.isPlaying() == true){ - coldStartProcessNormalAnim?.stop() - } - coldStartProcessAbnormalAnim?.start() + coldStartAbnormalView() } } @@ -158,16 +137,14 @@ class ColdStartProcessView @JvmOverloads constructor( * HQ、M1 MAP350开始弃用,其他车型MAP360开始弃用 */ override fun onAutopilotStatusRespByQuery(status: SystemStatusInfo.StatusInfo){ - ThreadUtils.runOnUiThread{ - //SSM连接成功 - connectSSMSuccess() - //通过autoPilotReady判断冷启动是否成功 - if(status.hasAutoPilotReady() && status.autoPilotReady && !coldStartStatus){ - coldStartStatus = true - showColdStartSuccessView() - //记录冷启动成功时间 - ColdStartConfig.setColdStartSuccessTime(System.currentTimeMillis()) - } + //SSM连接成功 + coldStartNormalView() + //通过autoPilotReady判断冷启动是否成功 + if(status.hasAutoPilotReady() && status.autoPilotReady && !coldStartStatus){ + coldStartStatus = true + showColdStartSuccessView() + //记录冷启动成功时间 + ColdStartConfig.setColdStartSuccessTime(System.currentTimeMillis()) } } @@ -178,11 +155,35 @@ class ColdStartProcessView @JvmOverloads constructor( * @param statusInf 数据 */ override fun onSystemStatus(statusInf: SsmInfo.SsmStatusInf){ - + //SSM连接成功 + coldStartNormalView() + //版本兼容 + if(parseVersion(true, statusInf.masterVersion) > 40600){ + //主动查询冷启动状态 + if(!newColdStart){ + newColdStart = true + CallerAutoPilotControlManager.sendSsmFuncQueryColdStartState() + } + }else{ + newColdStart = false + //通过autoPilotReady判断冷启动是否成功 + Log.i(TAG,"statusInf.autoPilotReady="+statusInf.autoPilotReady) + if(statusInf.hasAutoPilotReady() && statusInf.autoPilotReady && !coldStartStatus){ + coldStartStatus = true + showColdStartSuccessView() + //记录冷启动成功时间 + ColdStartConfig.setColdStartSuccessTime(System.currentTimeMillis()) + } + } } /** - * 冷启动状态 + * 冷启动状态变更上报以及查询状态 + * + * @param token 唯一消息ID + * @param timestamp 消息发送时间 单位:毫秒 + * @param isQuery 是否是查询 ture:查询相应的结果 false:表示状态变动域控主动推送 + * @param coldStartState 数据 null表示 PadSsmMsg中的消息体为null */ override fun onColdStartState( token: Long, @@ -190,15 +191,93 @@ class ColdStartProcessView @JvmOverloads constructor( isQuery: Boolean, coldStartState: SsmInfo.ColdStartState? ) { - + if(newColdStart){ + coldStartState?.let{ + Log.i(TAG,"节点自上报冷启动状态="+it.eventStatus) + ThreadUtils.runOnUiThread{ + if(it.eventStatus == SsmInfo.CSState.COLD_START_READY){ + if(!coldStartStatus){ + //冷启动就绪 + coldStartStatus = true + showColdStartSuccessView() + } + //记录冷启动成功时间 + ColdStartConfig.setColdStartSuccessTime(System.currentTimeMillis()) + } + if(it.eventStatus == SsmInfo.CSState.COLD_START_UNREADY || it.eventStatus == SsmInfo.CSState.COLD_START_TIMEOUT){ + //展示冷启动失败视图 + showColdStartFailView() + } + } + } + } } - private fun connectSSMSuccess(){ - + /** + * 冷启动进行中,不存在异常项 + */ + private fun coldStartNormalView(){ + ThreadUtils.runOnUiThread { + if(coldStartProcessAbnormalAnim?.isPlaying() == true){ + coldStartProcessAbnormalAnim?.stop() + } + if(coldStartProcessNormalAnim?.isPlaying() == false){ + coldStartProcessNormalAnim?.start() + } + } } + /** + * 冷启动进行中,存在异常项 + */ + private fun coldStartAbnormalView(){ + ThreadUtils.runOnUiThread { + if(coldStartProcessNormalAnim?.isPlaying() == true){ + coldStartProcessNormalAnim?.stop() + } + if(coldStartProcessAbnormalAnim?.isPlaying() == false){ + coldStartProcessAbnormalAnim?.start() + } + } + } + + /** + * 冷启动成功视图 + */ private fun showColdStartSuccessView(){ + ThreadUtils.runOnUiThread { + var label = true + coldStartSuccessTimer = object: CountDownTimer(COLD_START_SUCCESS_SHOW_TIME,COLD_START_SUCCESS_TICK_TIME){ + override fun onTick(millisUntilFinished: Long) { + ThreadUtils.runOnUiThread { + label = if(label){ + transition?.startTransition(500) + false + }else{ + transition?.reverseTransition(500) + true + } + } + } + override fun onFinish() { + ThreadUtils.runOnUiThread { + this@ColdStartProcessView.visibility = View.GONE + } + } + + } + coldStartSuccessTimer?.start() + } + } + + /** + * 冷启动失败视图 + */ + private fun showColdStartFailView(){ + ThreadUtils.runOnUiThread { + + } } private val pattern = Pattern.compile("\\d+\\.\\d+\\.\\d+")