From 1efcc95787883aec38b39edc28891550e40ea253 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Fri, 9 May 2025 17:25:32 +0800 Subject: [PATCH] =?UTF-8?q?[8.0.0]=20[fix]=20[=E4=B8=89=E8=81=94=E5=B1=8F?= =?UTF-8?q?=E5=92=8C=E4=BA=8C=E8=81=94=E5=B1=8F]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/och/bridge/BridgeProvider.kt | 33 +++++++-- .../mogo/och/bridge/BridgeServiceManager.kt | 63 +++++++++++++++++ .../och/bridge/bridge/OchBridgeManager.kt | 46 +++++++++++++ .../module/biz/birdge/BridgeListener.kt | 11 +++ .../common/module/biz/birdge/BridgeManager.kt | 8 +++ .../common/module/biz/birdge/BridgeService.kt | 3 + .../passenger/ui/homepage/HomeView.kt | 35 ++++++++-- .../passenger/ui/homepage/HomeViewModel.kt | 68 +++++++++++++++++++ 8 files changed, 257 insertions(+), 10 deletions(-) create mode 100644 OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeServiceManager.kt create mode 100644 OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchBridgeManager.kt create mode 100644 OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeListener.kt create mode 100644 OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/homepage/HomeViewModel.kt diff --git a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeProvider.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeProvider.kt index cc3be2f1c4..4e122688ab 100644 --- a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeProvider.kt +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeProvider.kt @@ -3,12 +3,15 @@ package com.mogo.och.bridge import android.content.Context import com.alibaba.android.arouter.facade.annotation.Route import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.function.call.base.CallerBase import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON import com.mogo.eagle.core.utilcode.util.CoordinateUtils import com.mogo.och.bridge.autopilot.location.OchLocationManager import com.mogo.och.bridge.distance.TrajectoryAndDistanceManager +import com.mogo.och.bridge.bridge.OchBridgeManager import com.mogo.och.common.module.biz.birdge.BridgeService +import com.mogo.och.common.module.biz.birdge.BridgeListener import com.mogo.och.common.module.constant.OchCommonConst @@ -16,12 +19,18 @@ import com.mogo.och.common.module.constant.OchCommonConst * eye 桥 */ @Route(path = OchCommonConst.BIZ_Bridge) -class BridgeProvider : BridgeService { +class BridgeProvider : BridgeService, CallerBase() { private var context: Context? = null private val tag = M_OCHCOMMON + "BridgeProvider" + + override fun init(context: Context?) { + this.context = context + OchBridgeManager.load() + } + override fun setDistanceStation(startLocation: MogoLocation?, endLocation: MogoLocation?, lineId: Long?) { CallerLogger.d(tag,"distance 设置起始站点的定位") TrajectoryAndDistanceManager.setStationPoint(startLocation,endLocation,lineId) @@ -38,9 +47,25 @@ class BridgeProvider : BridgeService { } } - - override fun init(context: Context?) { - this.context = context + override fun addBridgeListener(tag: String, listener: BridgeListener) { + addListener(tag,listener) } + override fun removeBridgeListener(tag: String) { + removeListener(tag) + } + + fun invokeTrajectoryHaveDataListener(haveTrajectoryInfos:Boolean){ + M_LISTENERS.forEach{ + it.value.onTrajectoryHaveData(haveTrajectoryInfos) + } + } + + fun invokePredictionHavaData(havePredictionInfos: Boolean) { + M_LISTENERS.forEach{ + it.value.onPredictionHavaData(havePredictionInfos) + } + } + + } \ No newline at end of file diff --git a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeServiceManager.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeServiceManager.kt new file mode 100644 index 0000000000..4d7658acb7 --- /dev/null +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/BridgeServiceManager.kt @@ -0,0 +1,63 @@ +package com.mogo.och.bridge + +import android.annotation.SuppressLint +import com.alibaba.android.arouter.launcher.ARouter +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON +import com.mogo.och.common.module.constant.OchCommonConst +import com.mogo.och.common.module.manager.loop.BizLoopManager +import com.mogo.och.common.module.manager.loop.LoopInfo +import io.reactivex.schedulers.Schedulers +import kotlin.properties.Delegates + +object BridgeServiceManager { + + private const val TAG = M_OCHCOMMON+"BridgeManager" + + @SuppressLint("StaticFieldLeak") + private var bridgeService: BridgeProvider? = + ARouter.getInstance().build(OchCommonConst.BIZ_Bridge).navigation() as BridgeProvider + + private var trajectoryTime = 0L + private var predictionTime = 0L + + init { + BizLoopManager.setLoopFunction(TAG, + LoopInfo(2, ::checkTimeout, immediately = false, scheduler = Schedulers.io()) + ) + } + + // 是否有车前引导线 + private var haveTrajectoryInfo: Boolean by Delegates.observable(false) { _, oldValue, newValue -> + if (oldValue != newValue) { + bridgeService?.invokeTrajectoryHaveDataListener(newValue) + } + trajectoryTime = System.currentTimeMillis() + + } + + // 是否有预测数据 + private var havePredictionInfo: Boolean by Delegates.observable(false) { _, oldValue, newValue -> + if (oldValue != newValue) { + bridgeService?.invokePredictionHavaData(newValue) + } + predictionTime = System.currentTimeMillis() + } + + fun checkTimeout(){ + if(System.currentTimeMillis() - trajectoryTime>1_000){ + haveTrajectoryInfo = false + } + if(System.currentTimeMillis() - trajectoryTime>1_000){ + havePredictionInfo = false + } + } + + + fun invokePlanningListener(haveTrajectoryInfos:Boolean){ + this.haveTrajectoryInfo = haveTrajectoryInfos + } + + fun invokePredictionHaveData(havePredictionInfos:Boolean){ + this.havePredictionInfo = havePredictionInfos + } +} \ No newline at end of file diff --git a/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchBridgeManager.kt b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchBridgeManager.kt new file mode 100644 index 0000000000..885ddfe945 --- /dev/null +++ b/OCH/common/bridge/src/main/java/com/mogo/och/bridge/bridge/OchBridgeManager.kt @@ -0,0 +1,46 @@ +package com.mogo.och.bridge.bridge + +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener +import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningTrajectoryListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager +import com.mogo.eagle.core.function.call.autopilot.CallerPlanningTrajectoryListenerManager +import com.mogo.eagle.core.function.call.base.CallerBase +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON +import com.mogo.och.bridge.BridgeServiceManager +import prediction2025.Prediction2025 +import mogo.telematics.pad.MessagePad + +object OchBridgeManager: CallerBase(), + IMoGoPlanningTrajectoryListener, IMoGoAutopilotIdentifyListener { + private val TAG = "${M_OCHCOMMON}OchPlanningListenerManager" + + fun load(){ + CallerPlanningTrajectoryListenerManager.addListener(TAG,this) + CallerAutopilotIdentifyListenerManager.addListener(TAG,this) + } + + fun release(){ + CallerPlanningTrajectoryListenerManager.removeListener(TAG) + } + + /** + * 引导线轨迹 + */ + override fun onAutopilotTrajectory(trajectoryInfos: MutableList) { + if(trajectoryInfos.isEmpty()){ + BridgeServiceManager.invokePlanningListener(false) + }else{ + BridgeServiceManager.invokePlanningListener(true) + } + } + + override fun onPredictionObstacleTrajectory(predictionObjects: Prediction2025.mPredictionObjects) { + if (predictionObjects.objsAppList==null||predictionObjects.objsAppCount<=0) { + BridgeServiceManager.invokePredictionHaveData(false) + }else{ + BridgeServiceManager.invokePredictionHaveData(true) + } + } + + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeListener.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeListener.kt new file mode 100644 index 0000000000..3e00992024 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeListener.kt @@ -0,0 +1,11 @@ +package com.mogo.och.common.module.biz.birdge + +interface BridgeListener { + /** + * 是否有引导线 + */ + fun onTrajectoryHaveData(haveTrajectoryInfos: Boolean) + + fun onPredictionHavaData(havePredictionInfos: Boolean) + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeManager.kt index d8ab753328..cbbebc977e 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeManager.kt @@ -27,4 +27,12 @@ object BridgeManager { return bridgeService?.distance2Point(gcjLat,gcjLon)?:0f } + fun addBridgeListener(tag:String, listener: BridgeListener){ + bridgeService?.addBridgeListener(tag,listener) + } + + fun removeBridgeListener(tag: String){ + bridgeService?.removeBridgeListener(tag) + } + } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeService.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeService.kt index e14e1916b9..a2c539aae2 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeService.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/biz/birdge/BridgeService.kt @@ -10,4 +10,7 @@ interface BridgeService : IProvider { fun distance2Point(gcjLat: Double, gcjLon: Double): Float + fun addBridgeListener(tag:String, listener:BridgeListener) + + fun removeBridgeListener(tag: String) } \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/homepage/HomeView.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/homepage/HomeView.kt index a6af7ddbc8..d77eae7f9d 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/homepage/HomeView.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/homepage/HomeView.kt @@ -9,8 +9,12 @@ import android.util.AttributeSet import android.view.LayoutInflater import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.Guideline +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.mogo.eagle.core.data.map.MogoLatLng import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.bridge.autopilot.location.OchLocationManager import com.mogo.och.unmanned.passenger.ui.bar.LeftBarView import com.mogo.och.unmanned.taxi.passenger.R import kotlinx.android.synthetic.main.taxi_p_home.view.decContainer @@ -28,7 +32,7 @@ class HomeView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 -) : ConstraintLayout(context, attrs, defStyleAttr){ +) : ConstraintLayout(context, attrs, defStyleAttr), HomeViewModel.HomeCallback { private var isAMapShow = true @@ -38,6 +42,9 @@ class HomeView @JvmOverloads constructor( private var TAG = "HomeView" + private var viewModel: HomeViewModel?=null + + private fun initView() { LayoutInflater.from(context).inflate(R.layout.taxi_p_home, this, true) @@ -49,10 +56,10 @@ class HomeView @JvmOverloads constructor( lbv_go2_center.setOrderIdCallback(object : LeftBarView.LeftBarCallback{ override fun setGo2CenterClick() { //切换到地图中间 -// mapBizView.getUI()?.let { -// val wgs02Location = OchLocationManager.getWgs02Location() -// it.moveToCenter(MogoLatLng(wgs02Location.latitude,wgs02Location.longitude)) -// } + hdMapView.getUI()?.let { + val wgs02Location = OchLocationManager.getWgs02Location() + it.moveToCenter(MogoLatLng(wgs02Location.latitude, wgs02Location.longitude)) + } //overMapView.displayCustomOverView() } @@ -67,7 +74,7 @@ class HomeView @JvmOverloads constructor( } fun showHdMap(){ - updateViewState(true,false,true) + updateViewState(true,false,false) } fun showAmapAndHdMap(){ @@ -110,6 +117,14 @@ class HomeView @JvmOverloads constructor( decContainer.onDestroy() } + override fun onAttachedToWindow() { + super.onAttachedToWindow() + viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(HomeViewModel::class.java) + } + viewModel?.setViewCallback(this) + } + private fun updateViewState( showHDMapView: Boolean, @@ -224,4 +239,12 @@ class HomeView @JvmOverloads constructor( } } + override fun showTwoScreen() { + showHdMap() + } + + override fun showThreeScreen() { + showAmapAndHdMap() + } + } \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/homepage/HomeViewModel.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/homepage/HomeViewModel.kt new file mode 100644 index 0000000000..0a67fd10c2 --- /dev/null +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/unmanned/passenger/ui/homepage/HomeViewModel.kt @@ -0,0 +1,68 @@ +package com.mogo.och.unmanned.passenger.ui.homepage + +import androidx.lifecycle.ViewModel +import com.mogo.och.common.module.biz.birdge.BridgeListener +import com.mogo.och.common.module.biz.birdge.BridgeManager +import com.mogo.och.common.module.manager.loop.BizLoopManager +import com.mogo.och.data.taxi.BaseOrderBean +import com.mogo.och.unmanned.taxi.utils.order.OrderListener +import com.mogo.och.unmanned.taxi.utils.order.OrderModel + +class HomeViewModel : ViewModel(), BridgeListener, OrderListener { + + private val TAG = HomeViewModel::class.java.simpleName + + private val orderShowEvaluate = "SHOWEVALUATE" + + private var viewCallback: HomeCallback? = null + + private var order:BaseOrderBean?=null + private var haveTrajectoryInfos:Boolean = false + private var havePredictionInfos:Boolean = false + + fun setViewCallback(viewCallback: HomeCallback) { + this.viewCallback = viewCallback + BridgeManager.addBridgeListener(TAG,this) + OrderModel.setOrderStatusCallback(TAG,this) + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + BridgeManager.removeBridgeListener(TAG) + } + + interface HomeCallback { + fun showTwoScreen() + fun showThreeScreen() + } + + override fun onTrajectoryHaveData(haveTrajectoryInfos: Boolean) { + this.haveTrajectoryInfos = haveTrajectoryInfos + checkScreenChange() + } + + override fun onPredictionHavaData(havePredictionInfos: Boolean) { + this.havePredictionInfos = havePredictionInfos + checkScreenChange() + } + + override fun onCurrentOrderStatusChanged(order: BaseOrderBean?) { + this.order = order + checkScreenChange() + } + + fun checkScreenChange(){ + if(order!=null&&havePredictionInfos&&havePredictionInfos){ + // 展示三联屏 + BizLoopManager.runInMainThread{ + this.viewCallback?.showThreeScreen() + } + }else{ + // 展示二联屏幕 + BizLoopManager.runInMainThread{ + this.viewCallback?.showTwoScreen() + } + } + } +} \ No newline at end of file