From 67ce8b1c8c98e6f0336979735b6e357e208f2edc Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Thu, 10 Jul 2025 14:37:29 +0800 Subject: [PATCH] =?UTF-8?q?[8.1.2][feat]=E5=86=B3=E7=AD=96=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E7=94=A8=E5=8A=A8=E7=94=BB=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../och/bridge/bridge/OchBridgeManager.kt | 5 +- .../passenger/ui/homepage/HomeView.kt | 13 +- .../passenger/ui/homepage/HomeViewModel.kt | 30 +- .../src/main/res/layout/taxi_p_home.xml | 32 +- .../identify/MapIdentifySubscriber.kt | 26 +- .../routeoverlay/MogoRouteOverlayManager.java | 4 - .../routeoverlay/PredictionOverlayDrawer.java | 2 +- .../core/function/view/DecisionLayout.kt | 304 +++++++++++++++--- .../layout_decision_video_container.xml | 136 ++++++++ .../src/main/res/raw/chu_zhan.mp4 | Bin 0 -> 6079 bytes .../src/main/res/raw/lukouyouzhuan.mp4 | Bin 0 -> 6127 bytes .../src/main/res/raw/lukouzhixing.mp4 | Bin 0 -> 5893 bytes .../src/main/res/raw/lukouzuozhuan.mp4 | Bin 0 -> 5975 bytes .../src/main/res/raw/wujuece.mp4 | Bin 0 -> 4977 bytes .../src/main/res/raw/youbizhang.mp4 | Bin 0 -> 6689 bytes .../src/main/res/raw/youhuandao.mp4 | Bin 0 -> 6000 bytes .../src/main/res/raw/zhixing.mp4 | Bin 0 -> 5644 bytes .../src/main/res/raw/zuobizhang.mp4 | Bin 0 -> 6815 bytes .../src/main/res/raw/zuohuandao.mp4 | Bin 0 -> 6071 bytes .../src/main/res/values/attrs.xml | 2 +- .../core/widget/media/video/CustomManager.kt | 183 +++++++++++ .../widget/media/video/MultiVideoPlayer.kt | 205 ++++++++++++ .../mogo-core-res/src/main/res/values/ids.xml | 2 + gradle.properties | 4 +- .../src/main/java/com/mogo/map/IMogoMap.kt | 2 + .../src/main/java/com/mogo/map/AMapWrapper.kt | 4 + 26 files changed, 843 insertions(+), 111 deletions(-) create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/layout/layout_decision_video_container.xml create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/raw/chu_zhan.mp4 create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/raw/lukouyouzhuan.mp4 create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/raw/lukouzhixing.mp4 create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/raw/lukouzuozhuan.mp4 create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/raw/wujuece.mp4 create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/raw/youbizhang.mp4 create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/raw/youhuandao.mp4 create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/raw/zhixing.mp4 create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/raw/zuobizhang.mp4 create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/raw/zuohuandao.mp4 create mode 100644 core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/media/video/CustomManager.kt create mode 100644 core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/media/video/MultiVideoPlayer.kt 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 index 661733f998..765f217795 100644 --- 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 @@ -26,6 +26,9 @@ import com.mogo.map.overlay.core.Level import com.mogo.map.overlay.point.Point import com.mogo.och.bridge.BridgeServiceManager import com.mogo.och.bridge.R +import com.mogo.och.common.module.manager.loop.BizLoopManager +import com.mogo.och.common.module.manager.loop.LoopInfo +import io.reactivex.schedulers.Schedulers import prediction2025.Prediction2025 import mogo.telematics.pad.MessagePad import kotlin.properties.Delegates @@ -54,6 +57,7 @@ object OchBridgeManager: IMoGoPlanningTrajectoryListener, IMoGoAutopilotIdentify CallerPlanningTrajectoryListenerManager.addListener(TAG,this) CallerAutopilotIdentifyListenerManager.addListener(TAG,this) CallerPlanningActionsListenerManager.addListener(TAG, this) + BizLoopManager.setLoopFunction(TAG, LoopInfo(2, ::checkTimeout, immediately = false, scheduler = Schedulers.io())) UiThreadHandler.postDelayed(timeRunnable, 1000) } @@ -70,7 +74,6 @@ object OchBridgeManager: IMoGoPlanningTrajectoryListener, IMoGoAutopilotIdentify CallerLogger.d(TAG,"haveTrajectoryInfo 发生变化:${newValue}") } trajectoryTime = System.currentTimeMillis() - } // 是否有预测数据 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 4060c0e58e..041376229b 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 @@ -24,6 +24,7 @@ import kotlinx.android.synthetic.main.taxi_p_home.view.lbv_go2_center import kotlinx.android.synthetic.main.taxi_p_home.view.leftEndGuideline import kotlinx.android.synthetic.main.taxi_p_home.view.midContainer import kotlinx.android.synthetic.main.taxi_p_home.view.midStartGuideline +import kotlinx.android.synthetic.main.taxi_p_home.view.preContainer class HomeView @JvmOverloads constructor( context: Context, @@ -87,37 +88,37 @@ class HomeView @JvmOverloads constructor( fun onCreate(savedInstanceState: Bundle?) { hdMapView.onCreate(savedInstanceState) -// preContainer.onCreate(savedInstanceState) + preContainer.onCreate(savedInstanceState) // decContainer.onCreate(savedInstanceState) } fun onSaveInstanceState(outState: Bundle) { hdMapView.onSaveInstanceState(outState) -// preContainer.onSaveInstanceState(outState) + preContainer.onSaveInstanceState(outState) // decContainer.onSaveInstanceState(outState) } fun onResume() { hdMapView.onResume() -// preContainer.onResume() + preContainer.onResume() // decContainer.onResume() } fun onLowMemory() { hdMapView.onLowMemory() -// preContainer.onLowMemory() + preContainer.onLowMemory() // decContainer.onLowMemory() } fun onPause() { hdMapView.onPause() -// preContainer.onPause() + preContainer.onPause() // decContainer.onPause() } fun onDestroy() { hdMapView.onDestroy() -// preContainer.onDestroy() + preContainer.onDestroy() // decContainer.onDestroy() } 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 index ecadbb6a40..6a12f62a33 100644 --- 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 @@ -55,21 +55,19 @@ class HomeViewModel : ViewModel(), BridgeListener, OrderListener { } private fun checkScreenChange(){ -// CallerLogger.d(TAG,"havePredictionInfos:${havePredictionInfos}--haveTrajectoryInfos:${haveTrajectoryInfos}--order:${order}") -// if(havePredictionInfos&&havePredictionInfos){//order!=null&& -// FunctionBuildConfig.isDrawDecIdentifyData = true -// FunctionBuildConfig.isDrawPreIdentifyData = true -// // 展示三联屏 -// BizLoopManager.runInMainThread{ -// this.viewCallback?.showThreeScreen() -// } -// }else{ -// FunctionBuildConfig.isDrawDecIdentifyData = false -// FunctionBuildConfig.isDrawPreIdentifyData = false -// // 展示二联屏幕 -// BizLoopManager.runInMainThread{ -// this.viewCallback?.showTwoScreen() -// } -// } + CallerLogger.d(TAG,"havePredictionInfos:${havePredictionInfos}--haveTrajectoryInfos:${haveTrajectoryInfos}--order:${order}") + if(order!=null&&havePredictionInfos&&havePredictionInfos){ + // 展示三联屏 + BizLoopManager.runInMainThread{ + this.viewCallback?.showThreeScreen() + FunctionBuildConfig.isDrawPreIdentifyData = true + } + }else{ + FunctionBuildConfig.isDrawPreIdentifyData = false + // 展示二联屏幕 + BizLoopManager.runInMainThread{ + this.viewCallback?.showTwoScreen() + } + } } } \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/res/layout/taxi_p_home.xml b/OCH/taxi/unmanned-passenger/src/main/res/layout/taxi_p_home.xml index 37838ee628..ca7b9f7dd7 100644 --- a/OCH/taxi/unmanned-passenger/src/main/res/layout/taxi_p_home.xml +++ b/OCH/taxi/unmanned-passenger/src/main/res/layout/taxi_p_home.xml @@ -34,23 +34,23 @@ app:layout_constraintStart_toEndOf="@+id/midStartGuideline" app:layout_constraintTop_toTopOf="parent"> - - - - - - - - + - - - - - - - - + diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt index e5c942f89b..17a8176d08 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/identify/MapIdentifySubscriber.kt @@ -105,24 +105,26 @@ class MapIdentifySubscriber private constructor() : IMoGoSubscriber, predictionObjects.objsAppList.forEach { preObj -> val points = ArrayList() if (preObj.mNid == 800000L) { - // 自车有2条轨迹,一条概率大、一条概率小 - if (preObj.predictionTrajectoryList == null || preObj.predictionTrajectoryList.size < 2) return@forEach - carPoiList1 = preObj.predictionTrajectoryList[0].trajectoryPointsList - carPoiList2 = preObj.predictionTrajectoryList[1].trajectoryPointsList - location1 = LocationUtils.generateLocation(carPoiList1!![0].x, carPoiList1!![0].y, getLocationHeading()) - location2 = LocationUtils.generateLocation(carPoiList2!![0].x, carPoiList2!![0].y, getLocationHeading()) - if (location1 == null || location2 == null) return@forEach - probability1 = preObj.predictionTrajectoryList[0].predictionProbability - probability2 = preObj.predictionTrajectoryList[1].predictionProbability - CallerAutopilotIdentifyListenerManager.invokeProbabilityChanged(probability1, probability2) +// // 自车有2条轨迹,一条概率大、一条概率小 +// if (preObj.predictionTrajectoryList == null || preObj.predictionTrajectoryList.size < 2) return@forEach +// carPoiList1 = preObj.predictionTrajectoryList[0].trajectoryPointsList +// carPoiList2 = preObj.predictionTrajectoryList[1].trajectoryPointsList +// location1 = LocationUtils.generateLocation(carPoiList1!![0].x, carPoiList1!![0].y, getLocationHeading()) +// location2 = LocationUtils.generateLocation(carPoiList2!![0].x, carPoiList2!![0].y, getLocationHeading()) +// if (location1 == null || location2 == null) return@forEach +// probability1 = preObj.predictionTrajectoryList[0].predictionProbability +// probability2 = preObj.predictionTrajectoryList[1].predictionProbability +// CallerAutopilotIdentifyListenerManager.invokeProbabilityChanged(probability1, probability2) - PredictionDataManager.getInstance()?.updateData(carPoiList1!!, 0) - PredictionDataManager.getInstance()?.updateData(carPoiList2!!, 2) +// PredictionDataManager.getInstance()?.updateData(carPoiList1!!, 0) +// PredictionDataManager.getInstance()?.updateData(carPoiList2!!, 2) } else { if (isUnKnownType(preObj.classtype) || preObj.predictionTrajectoryList.isNullOrEmpty() || mogoMap == null) return@forEach point = preObj.predictionTrajectoryList[0].trajectoryPointsList[0] arr = mogoMap.switchData(point.x, point.y, false) arr?.let { lonLatArr -> + // 感知物不在当前视椎体内则不渲染其预测轨迹 + if (!mogoMap.isInCurrentFrame(lonLatArr[0], lonLatArr[1])) return@forEach val distance = com.mogo.eagle.core.utilcode.util.LocationUtils.getDistance(getWgs84Lat(), getWgs84Lon(), lonLatArr[1], lonLatArr[0]) if (distance > 28) return@forEach } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java index 4f618550c4..2908c58310 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/MogoRouteOverlayManager.java @@ -131,16 +131,12 @@ public class MogoRouteOverlayManager implements // Log.d(TAG, "-- onChassisLocationGCJ02 -- 1 ---" + ":auto-mode:" + autoPilotState + ", isArriveAtStation: " + isArriveAtStation); if (isArriveAtStation && autoPilotState != 2) { RouteOverlayDrawer.getInstance().clearMogoRouteOverlay(); - PredictionOverlayDrawer2.getInstance().clearPreRouteOverlay(); - PredictionOverlayDrawer3.getInstance().clearPreRouteOverlay(); return; } // Log.d(TAG, "-- onChassisLocationGCJ02 -- 2 ---" + "auto-mode:" + autoPilotState + ", isDemoMode:" + FunctionBuildConfig.isDemoMode + ", force:" + FunctionBuildConfig.isForceDrawAutopilotTrajectoryByDebugSettingView); boolean force = hasGreenWave.get() || FunctionBuildConfig.isForceDrawAutopilotTrajectoryByDebugSettingView || FunctionBuildConfig.isDemoMode && FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData; if (!force && autoPilotState != 2) { RouteOverlayDrawer.getInstance().clearMogoRouteOverlay(); - PredictionOverlayDrawer2.getInstance().clearPreRouteOverlay(); - PredictionOverlayDrawer3.getInstance().clearPreRouteOverlay(); return; } // Log.d(TAG, "-- onChassisLocationGCJ02 -- 3 ---"); diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer.java index d78b5ab784..b5f36f5a4f 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/routeoverlay/PredictionOverlayDrawer.java @@ -148,7 +148,7 @@ public class PredictionOverlayDrawer { builder.color(Color.argb(102,48,163,255)); builder.setIsGradient(true); builder.setLightOn(false); - builder.setIsDottedLine(true); + builder.setIsDottedLine(false); builder.isShowArrow(false); builder.points(pps); builder.setVisible(true); diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/DecisionLayout.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/DecisionLayout.kt index e75318fb4f..5c69b048df 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/DecisionLayout.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/DecisionLayout.kt @@ -3,25 +3,40 @@ package com.mogo.eagle.core.function.view import android.annotation.SuppressLint import android.content.Context import android.os.Bundle +import android.os.SystemClock import android.util.AttributeSet import android.view.LayoutInflater import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener -import com.mogo.eagle.core.function.business.routeoverlay.DecisionDataManager -import com.mogo.eagle.core.function.business.routeoverlay.PredictionDataManager +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningActionsListener import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager +import com.mogo.eagle.core.function.call.autopilot.CallerPlanningActionsListenerManager import com.mogo.eagle.core.function.map.R import com.mogo.eagle.core.utilcode.util.ThreadUtils -import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.model.VideoOptionModel +import com.shuyu.gsyvideoplayer.player.IjkPlayerManager +import com.shuyu.gsyvideoplayer.player.PlayerFactory +import com.shuyu.gsyvideoplayer.utils.GSYVideoType import kotlinx.android.synthetic.main.layout_decision_container.view.tvPre1 import kotlinx.android.synthetic.main.layout_decision_container.view.tvPre2 import kotlinx.android.synthetic.main.layout_decision_container.view.tvPre3 -import me.jessyan.autosize.utils.AutoSizeUtils +import kotlinx.android.synthetic.main.layout_decision_video_container.view.decContent1 +import kotlinx.android.synthetic.main.layout_decision_video_container.view.decContent2 +import kotlinx.android.synthetic.main.layout_decision_video_container.view.decContent3 +import kotlinx.android.synthetic.main.layout_decision_video_container.view.decMapView +import kotlinx.android.synthetic.main.layout_decision_video_container.view.preDetailView2 +import kotlinx.android.synthetic.main.layout_decision_video_container.view.preDetailView3 +import mogo.telematics.pad.MessagePad +import tv.danmaku.ijk.media.player.IjkMediaPlayer +import kotlin.random.Random class DecisionLayout @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null -) : ConstraintLayout(context, attrs), IMoGoAutopilotIdentifyListener { +) : ConstraintLayout(context, attrs), IMoGoAutopilotIdentifyListener, + IMoGoAutopilotPlanningActionsListener { companion object { private const val TAG = "DecisionLayout" @@ -32,6 +47,21 @@ class DecisionLayout @JvmOverloads constructor( private var carType = 0 + private val gsyVideoOptionBuilder1 by lazy { + GSYVideoOptionBuilder() + } + private var lastUrl1 = "" + + private val gsyVideoOptionBuilder2 by lazy { + GSYVideoOptionBuilder() + } + private var lastUrl2 = "" + + private val gsyVideoOptionBuilder3 by lazy { + GSYVideoOptionBuilder() + } + private var lastUrl3 = "" + init { initView(attrs) } @@ -40,21 +70,26 @@ class DecisionLayout @JvmOverloads constructor( val typedArray = context.obtainStyledAttributes(attrs, R.styleable.CarMapLayout) carType = typedArray.getInt(R.styleable.CarMapLayout_car_type, 0) typedArray.recycle() - when (carType) { - 0 -> LayoutInflater.from(context).inflate(R.layout.layout_decision_container, this, true) - else -> LayoutInflater.from(context).inflate(R.layout.layout_b2_decision_container, this, true) - } - storeWidthAndHeight() +// when (carType) { +// 0 -> LayoutInflater.from(context).inflate(R.layout.layout_decision_container, this, true) +// else -> LayoutInflater.from(context).inflate(R.layout.layout_b2_decision_container, this, true) +// } + LayoutInflater.from(context).inflate(R.layout.layout_decision_video_container, this, true) +// storeWidthAndHeight() + initViews() + initVideos() } override fun onAttachedToWindow() { super.onAttachedToWindow() CallerAutopilotIdentifyListenerManager.addListener(TAG, this) + CallerPlanningActionsListenerManager.addListener(TAG, this) } override fun onDetachedFromWindow() { super.onDetachedFromWindow() CallerAutopilotIdentifyListenerManager.removeListener(TAG) + CallerPlanningActionsListenerManager.removeListener(TAG) } fun onCreate(savedInstanceState: Bundle?) { @@ -66,30 +101,6 @@ class DecisionLayout @JvmOverloads constructor( fun onResume() { } - @SuppressLint("SetTextI18n") - override fun onPredictionProbabilityChanged(pro1: Float, pro2: Float) { - if (System.currentTimeMillis() - lastTime >= 1000) { - ThreadUtils.runOnUiThread { - val prob1: Int - val prob2: Int - val prob3: Int - if (pro1 + pro2 < 50) { - prob1= (pro1*100).toInt() - prob3= (pro2*100).toInt() - prob2 = 100 - prob1 - prob3 - } else { - prob1 = 15 * (pro1 / (pro1 + pro2)).toInt() - prob3 = 15 * (pro2 / (pro1 + pro2)).toInt() - prob2 = 100 - prob1 - prob3 - } - tvPre1.text = "${prob1}%" - tvPre3.text = "${prob3}%" - tvPre2.text = "${prob2}%" - } - lastTime = System.currentTimeMillis() - } - } - fun onLowMemory() { } @@ -99,25 +110,214 @@ class DecisionLayout @JvmOverloads constructor( fun onDestroy() { } - private fun storeWidthAndHeight() { - UiThreadHandler.post { - when (carType) { - // 默认值为对应0,不需要赋值 - 1 -> { - val decWid = AutoSizeUtils.dp2px(context, 110f) - val decHet = AutoSizeUtils.dp2px(context, 211f) - val mapWid = AutoSizeUtils.dp2px(context, 996f) - val mapHet = AutoSizeUtils.dp2px(context, 650f) - PredictionDataManager.getInstance()?.decWidth = decWid - PredictionDataManager.getInstance()?.decHeight = decHet - PredictionDataManager.getInstance()?.mapWidth = mapWid - PredictionDataManager.getInstance()?.mapHeight = mapHet - DecisionDataManager.getInstance()?.decWidth = decWid - DecisionDataManager.getInstance()?.decHeight = decHet - DecisionDataManager.getInstance()?.mapWidth = mapWid - DecisionDataManager.getInstance()?.mapHeight = mapHet - } + private var state = -1 + private var action = -1 + override fun pncActions(planningActionMsg: MessagePad.PlanningActionMsg) { + val actionMsg = planningActionMsg.actionMsg + val s = actionMsg.drivingState.number + val a = actionMsg.drivingAction.number + if(s == state && a == action){ + return + } else { + state = s + action = a + } + var type = -1 + if (actionMsg.drivingState == MessagePad.DrivingState.START_UP && actionMsg.drivingAction == MessagePad.DrivingAction.DRIVING_ACTION_STATE_ONE) { + type = 0// 出站 + } else if (actionMsg.drivingState == MessagePad.DrivingState.PULL_OVER && actionMsg.drivingAction == MessagePad.DrivingAction.DRIVING_ACTION_STATE_ONE) { + type = 1// 进站 + } else if (actionMsg.drivingState == MessagePad.DrivingState.LANKE_KEEP && actionMsg.drivingAction == MessagePad.DrivingAction.DRIVING_ACTION_STATE_ONE) { + type = 2// 车道保持 + } else if (actionMsg.drivingState == MessagePad.DrivingState.FOLLOW_LANE_CHANGE_LEFT) {//actionMsg.drivingAction == MessagePad.DrivingAction.DRIVING_ACTION_STATE_TWO + type = 3// 向左变道 + } else if (actionMsg.drivingState == MessagePad.DrivingState.FOLLOW_LANE_CHANGE_RIGHT) { + type = 4// 向右变道 + } else if (actionMsg.drivingState == MessagePad.DrivingState.LANE_AVOID_LEFT) { + type = 5// 向左变道绕障 + } else if (actionMsg.drivingState == MessagePad.DrivingState.LANE_AVOID_RIGHT) { + type = 6// 向右变道绕障 + } else if (actionMsg.drivingState == MessagePad.DrivingState.TRAFFIC_LIGHT) {// 距离停止线前15m内且是红灯才会发送该状态 + } + + if (type >= 0) { + ThreadUtils.runOnUiThread { + updateAnim(type) } } } + + @SuppressLint("SetTextI18n") + private fun updateAnim(type: Int) { + val randomNum = 80 + Random(SystemClock.elapsedRealtime()).nextInt(16) + val last = 100 - randomNum + val pre1 = Random(SystemClock.elapsedRealtime()).nextInt(last+1) + val pre2 = last - pre1 + tvPre1.text = "${pre1}%" + tvPre3.text = "${randomNum}%" + tvPre2.text = "${pre2}%" + + when (type) { + 0 -> { + decContent1.text = "停车等待" + decContent2.text = "变道出站" + decContent3.text = "直行出站" + + gsyVideoPlay(getRawPath(R.raw.wujuece)) + gsyVideoPlay2(getRawPath(R.raw.zuohuandao)) + gsyVideoPlay3(getRawPath(R.raw.zhixing)) + } + + 1 -> { + decContent1.text = "车道保持" + decContent2.text = "进站停车" + decContent3.text = "向右变道" + + gsyVideoPlay(getRawPath(R.raw.zhixing)) + gsyVideoPlay2(getRawPath(R.raw.youhuandao)) + gsyVideoPlay3(getRawPath(R.raw.youhuandao)) + } + + 2 -> { + decContent1.text = "向左变道" + decContent2.text = "车道保持" + decContent3.text = "向右变道" + + gsyVideoPlay(getRawPath(R.raw.zuohuandao)) + gsyVideoPlay2(getRawPath(R.raw.zhixing)) + gsyVideoPlay3(getRawPath(R.raw.youhuandao)) + } + + 3 -> { + decContent1.text = "车道保持" + decContent2.text = "向左变道" + decContent3.text = "向右变道" + + gsyVideoPlay(getRawPath(R.raw.zhixing)) + gsyVideoPlay2(getRawPath(R.raw.zuohuandao)) + gsyVideoPlay3(getRawPath(R.raw.youhuandao)) + } + + 4 -> { + decContent1.text = "向左变道" + decContent2.text = "向右变道" + decContent3.text = "车道保持" + + gsyVideoPlay(getRawPath(R.raw.zuohuandao)) + gsyVideoPlay2(getRawPath(R.raw.youhuandao)) + gsyVideoPlay3(getRawPath(R.raw.zhixing)) + } + + 5 -> { + decContent1.text = "车道保持" + decContent2.text = "向左变道绕障" + decContent3.text = "向右变道绕障" + + gsyVideoPlay(getRawPath(R.raw.zhixing)) + gsyVideoPlay2(getRawPath(R.raw.zuobizhang)) + gsyVideoPlay3(getRawPath(R.raw.youbizhang)) + } + + 6 -> { + decContent1.text = "向左变道绕障" + decContent2.text = "向右变道绕障" + decContent3.text = "车道保持" + + gsyVideoPlay(getRawPath(R.raw.zuobizhang)) + gsyVideoPlay2(getRawPath(R.raw.youbizhang)) + gsyVideoPlay3(getRawPath(R.raw.zhixing)) + } + + 7 -> { + decContent1.text = "直行通过路口" + decContent2.text = "左转通过路口" + decContent3.text = "右转通过路口" + + gsyVideoPlay(getRawPath(R.raw.zhixing)) + gsyVideoPlay2(getRawPath(R.raw.lukouzuozhuan)) + gsyVideoPlay3(getRawPath(R.raw.lukouyouzhuan)) + } + + 8 -> { + decContent1.text = "左转通过路口" + decContent2.text = "直行通过路口" + decContent3.text = "右转通过路口" + + gsyVideoPlay(getRawPath(R.raw.lukouzuozhuan)) + gsyVideoPlay2(getRawPath(R.raw.lukouzhixing)) + gsyVideoPlay3(getRawPath(R.raw.lukouyouzhuan)) + } + + 9 -> { + decContent1.text = "左转通过路口" + decContent2.text = "右转通过路口" + decContent3.text = "直行通过路口" + + gsyVideoPlay(getRawPath(R.raw.lukouzuozhuan)) + gsyVideoPlay2(getRawPath(R.raw.lukouyouzhuan)) + gsyVideoPlay3(getRawPath(R.raw.lukouzhixing)) + } + } + } + + private fun initViews() { + } + + private fun initVideos() { + val list: MutableList = ArrayList() + list.add(VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "reconnect", 3)) + GSYVideoManager.instance().optionModelList = list + GSYVideoType.setShowType(GSYVideoType.SCREEN_MATCH_FULL) + GSYVideoType.setRenderType(GSYVideoType.TEXTURE) + PlayerFactory.setPlayManager(IjkPlayerManager::class.java) + } + + private fun gsyVideoPlay(flvUrl: String) { + if (flvUrl == lastUrl1) return + lastUrl1 = flvUrl + gsyVideoOptionBuilder1.setUrl(flvUrl) + .setCacheWithPlay(false) + .setAutoFullWithSize(false) + .setIsTouchWigetFull(false) + .setIsTouchWiget(false) + .setLooping(true) + .setPlayTag(TAG) + .setPlayPosition(0) + .build(preDetailView2) + preDetailView2.startPlayLogic() + } + + private fun gsyVideoPlay2(flvUrl: String) { + if (flvUrl == lastUrl2) return + lastUrl2 = flvUrl + gsyVideoOptionBuilder2.setUrl(flvUrl) + .setCacheWithPlay(false) + .setAutoFullWithSize(false) + .setIsTouchWigetFull(false) + .setIsTouchWiget(false) + .setLooping(true) + .setPlayTag(TAG) + .setPlayPosition(1) + .build(decMapView) + decMapView.startButton.performClick() + } + + private fun gsyVideoPlay3(flvUrl: String) { + if (flvUrl == lastUrl3) return + lastUrl3 = flvUrl + gsyVideoOptionBuilder3.setUrl(flvUrl) + .setCacheWithPlay(false) + .setAutoFullWithSize(false) + .setIsTouchWigetFull(false) + .setLooping(true) + .setIsTouchWiget(false) + .setPlayTag(TAG) + .setPlayPosition(2) + .build(preDetailView3) + preDetailView3.startButton.performClick() + } + + private fun getRawPath(resId: Int): String { + return "android.resource://${context.packageName}/$resId" + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/res/layout/layout_decision_video_container.xml b/core/function-impl/mogo-core-function-map/src/main/res/layout/layout_decision_video_container.xml new file mode 100644 index 0000000000..b6b6e1c9b3 --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/res/layout/layout_decision_video_container.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/res/raw/chu_zhan.mp4 b/core/function-impl/mogo-core-function-map/src/main/res/raw/chu_zhan.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..f6ca8c493a9cfdfd8993488d327efb9dba100735 GIT binary patch literal 6079 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 F{0mqeG%5f9 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/raw/lukouyouzhuan.mp4 b/core/function-impl/mogo-core-function-map/src/main/res/raw/lukouyouzhuan.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..23891a494dde6956c50c504802bfe4fa1847a46f GIT binary patch literal 6127 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 a$K7@ijfg*+4r_&X6A^nk?Kvju`M&_dz-2=K literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/raw/lukouzhixing.mp4 b/core/function-impl/mogo-core-function-map/src/main/res/raw/lukouzhixing.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..62b73465fc1f052da1bf7a40b4980961369fe051 GIT binary patch literal 5893 zcmeHLc|4Ts+n=#ZvZW|>9z`L`43k6?gW`yUQcA{bn9OEoXhrA*;*>69O8^g=O%#(ORB-T!V>4MJ zJnDmC%=f18m>d?;Q7PlHc@e;jjpHgn{~op(^T(VCQ^-O(sG<4Mu|f{^gI9?WiRm2R z?~24C#e)2h<7&{N0gu|>F@H$vA#HD95ux^<8b9Q}okiWp0L_+^= z|NeF4a2rYzWh?9eoGxxgFRo|3aX22Q8ujLd{WY*LVDLFY9)lynsevCg1gR^ai3HFi zw}{5l#loLeM>vRZMk29dMSxZ4%)#NbDv>TEidG7>5qobDQ;hI%n69po(f^A6Qw!ie zGJg34e+VB|U(q|~{`(k43b`UC(EI=S|G7R>E&gxSOR=sdu$LHUA)$@zrJw7LSAn^N zA5)4a$knBwrV1kh&{QA{=qL~xBVGq+Hqdw=eW1}m^MS?yp*b|33#9iqvIgD|NE-<0 zH~}Hs5qn$U#{rGllYlq+Ij;-7`A^;edW1jyXOD1y0~*0y1iTp#!bS1K0L=nI7$_b( z5V|lB_B0?bAUJCbKJ=(Tebn|t&yQt_Y0yV9d-u zT;B6|URTwtR_}^k)(^1OsoftW_KqaX24nDr00OMgfk+@=EG8jh7R?bRylp|j&Tr8? zFB=j@3HAU@CW`?R9(+MOhZP|PrvwKZ@N5slD6v@JY-hK6^=eymee*dqo-JP(X@|Vn zMv1u`(BTWjY(7uqj4^0*8iP#4;EE>OV@wvE!)HX3iOvLP0!HJ}IPoGDnIM6&gh(V} zToyTsCBa0obl@B@fhZnK;Yk%T$wXTM7{LSMvL!4g6(J%Es*uKuWRZ!E7$Zu^=hCQP zO2ouM7Kg(Y0p}!fVlu>J0>+5p!js9OF%$Sa7TKO?4IU$CA~97Uie?Ky^(R1#fXa`E z5V6E$8+%L~B?JoqB4QjqKbjT=BkI3|n25t>KrkZ$0>%?6oG{p2nivJb=80KC4h@t* zPUpl5Y4KDBpDUm#LV_B>>zmC32v8K#kWPe<#$}1f4j7#(hzFj{gv!yWG$u_T20%KM z&Zdcw6Sj~Ai4n2YEOum+m<}9Yz~WIO`2v{zAw*e4v*H1p>;RSf!BXL+3PVi9VDVUt zSTUJIKw%1LsHQ@eC<@Gl4C=qqMY=);nIVk8xbP}sp|oH?wzsz>U@<5eGQrjnSOEf7 z^fU?CaW)7-L?wZ(1d$*KJvKtbP5{YFBmqRE15i*z8iyJMYtDm( z!Xnrl_!}REI!1)g!${^0p9PPH{FZ~>)ieX*v zh^x!LiR#+88+NU&%ILbX-6p%f-8Dlk&9B>YgF^-5cwKtX!IsiZ{bi2^{5kmUWzrdk zx10Nv>`NMUqvZGu5UMtPPM{W-98@Q^O&@X_^Rn=>hW0F*qbt{!bXH)?Tj$g~)$n+? zZu_OMYkVKO>Ce`d5B8CZCUo>{X;7;*(2fYY_uic9tTe^^wOX^+^U9mJ_j^4JYpWV& z=hTEBJT%33O(=i;*Y%e6A0C?H|9llVcgMsf`{~#AT*G@Gd^^oVf4^~PNwaXqEwzA? z)ScPm2EV!2{$ac^9y7l6(xWX@XJ_TR1j|2c7l2%G0TDYkfqk3049y_K1Mc!qmJg!=n>{rOpr2mBm67Z&eJDSOOcsXvDl<0D!UYmm4Y}BBKIvn>syCZ?-M81#r@h?8JnGo+63Z0BNmc=$ zs_5kx7aJVvIqyI0y0#&Lx*@$RJc)Q9&urE8tCr34<|z3%>@{#XyW&*%?V48-?=K!Y zok7av`$sdLxXhgN^fx!-;O7UbH!64ai5~9o!EAE7CX=pStD$Xs`{dMQv+QA4zmq;) z!rj3>XM>VUXBr6CbZ;{L6uaSg=6~?j3JEgqPnqzB?_krJ_@UNJ)^*w3Y5s@D?;8#$TD@7Ekh`w1=~bCLFE?R# z`<0IL6MltRi)Gz=s5pXBTx7edWz|V99q*-sh3jg%m#&k)zN$*vtFgX7)c&$JYs#I5 z$6LO?mJ)(BFNeD8)er+7$BeS*?VWy#Sh~$=@#(6kN)0cOdW#-swkCvY&%xE*icI3x1Fa*j|7Lzj9z6)AgM&Aq}_{V z34{v{I}Cc&H&8+@V{419KkBiY@WtjG?(N>O*=ZWZNejlm3Oqk|-{nQz{)5u^St%YA zswBnt#2XXk6OPljsRw8Eou&AvhiCR&DAVOF8~8nsoOpGd+#R>4&G559%;dnWSE%01 z>b0LEzqfZ))-_AD=%eo>2Db(GxRgIz_0pWaPZ(SN^_FXzuC{eY|Gu}GqsOfE5>)2~ zPAPdGq};u&s;unMlrO=zZ>)78gc?@&daNuRShg-d_RP(=lEh;=XO{PE7Y1;PXr@`@ zt&@r(A}`j=Hh0*RusZ!tP{@Sh!mdNU4KpMsyXhyg4z)jiRze7Jd*EuIKIZdiR#yLv zgJtlIfT!e{alGW~@iBiibWZPdXQ}VLws>C(oh=zS^+206vON`x zZ9By!c`d}RSpCk&%_1p5Gv~lcIS#wzUiOCj)o212m zG}vo6U(D8!kYY{>){Ot-)E1Mo@3d8eDpYRz=uTg!qY+6re01f8#dX!?#$nl+8QU5U zw3ZLx^RI20x2`R7w)2j(u*A)?j@J9U==e?j^hx6zt_B0XXKty^Z|>^L))K4z^)|uw z;+d7aJ-Y#{|-s!2BUfUKHs-&2RFd7t^kq_lC2zw3Qc>a$~X*ER|ne zB0de+MO)zU)xBVi-gl2phKnD!BpPq!TBzjtm`WD-KZq#4O_;eyys?BL5H$~WKkM+R z{_bS&Xvh!qbXaK@loPa1wTt3yFfed@b@LjpTN=xKZ|!cF+tSpS`TXMszOFZ%jCCygFLrqKRF+9yg_uce{dQ)aO}58vBGFwc*LaDu@({lR8h&+FzF>ea!7E zxTUPM@omb=o3?s^TWX8c)qgiBqQzk@8`jjtrkTC?k@-O=j^1B>wI@vxc{P*K7w=3;-m#yBz^Usx6sDgy8lWCj3N(;Nn2@ZEL1y#8+o*>?eD6h$^h;acetjI{7F8{{!JJ7JQ-oy=~; zoiin$G~!PC*@5Ju_Cz6F<@i9->l-)Y7d{J*HuMd^yu$K_Sjppp0;Cy!p0cTwZ==GV zmL~y{HboYwaC3guoTPh5fS1J}PmMv7r*B6;OF$q3U$=L!SGsSEesfq*@+Bh<4Faxc zXntSZYi5LMgFNpdz^=AzMxNfJ&J6X0)BYb-Fial6U!tJYT{*QkPBry z7(iwfo^rhDSd+OyFeFj(FOGmu_*hwQXobHYGyjR3!Fiin_bWMGQGKUg6gNI>bo1bb z3N97gyrg@>4glt7lP=1TXsvUht-&PE9nTFGw`-vTvwr$gLG6|M^cp zVXtN0g{{txTQ_gIC|f~Za$~%wadW<*#+8g%UPE2#SJ2j{NGBt7yg2TLPH&8)N)~XfGck#4fCROjs5LOD({vCEPdurnLFv^km(c#_m)A+1&z&; ztO+g#i)>24ek|M&3Mb!-7w!@*dPgriILQ>`u-nj0pyWp7<~H=AB^j+a_(~4R?aD() z!}Qld$B{VFR=@iUu5yh1wzqq)x845`Xcdr*V9*&uIjDvhrKegqTbE?)e$tpuX`Q&GbF^vADz98#LSRu*VFB1pq)6Y*Bl-F( zzkH;U^FAr6aQQ)~%-Z4=c7ciXL6pYZ8k&x>nTqqE9R zN*^~Ii81z1-3)jbMMgl^k80$cR7Su#8*QyW50E#0pI*ngY_Qt9<;G{wf$ijvie)$} zVW8tZ`WM+Kyet5MqG&D2ff1LI9}F=~lz-oVFYnY!**3}l&r6p0XC_YZ+*FafvG+^O z9-r!mgA!5@8TWR+H>>LNYnt@ngxcK1`!RctjCu%Wqw%sGkcW!f;pOFMTfp(o@sukOV~^WJ zvy(s&M#;~EL=5DE%arWi)Q3CmHdntqGp+5R=h>B|J6Brct?TGFIuDwZboW>5G;A#l z|H3LL3D?P#Ey^Y~tUfoOd$eENevi6vMh$g4#l1%U#$WU3HCAP)aLa7HsDv}%!GHgk>*<-3Uvxz)(R^?lDVW(?$)GacIc-TYt9*Nh?jcC7c>Z*0xR}|mIo#O5hUdL z2~+<-bmKS_2D;b#e;?x$dUsrTpU9}~>X4&a@3XS3OmAizS;Z0qpZ80; O7hIb>{qof+xBmh*ox@51 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/raw/lukouzuozhuan.mp4 b/core/function-impl/mogo-core-function-map/src/main/res/raw/lukouzuozhuan.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..4aa1d394d246f5714d9619b2e736d5cb5f4ff623 GIT binary patch literal 5975 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 Tylpz{IeK9bQ91DZE~@ZfD5(h` literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/raw/wujuece.mp4 b/core/function-impl/mogo-core-function-map/src/main/res/raw/wujuece.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..0edfbacb3ee96e73898edd0033dfc324152fca59 GIT binary patch literal 4977 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/raw/zhixing.mp4 b/core/function-impl/mogo-core-function-map/src/main/res/raw/zhixing.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..8dce6827bdadf8714dcdc0288965d46dbb17dd78 GIT binary patch literal 5644 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/raw/zuobizhang.mp4 b/core/function-impl/mogo-core-function-map/src/main/res/raw/zuobizhang.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..7e2eeb998738609abc649b7d84154e8750ad8ec4 GIT binary patch literal 6815 zcmdT|c|6qJ_n)x~ktGruMR>Bzj5RefwveqPq#9!uGnviI5G{`_Ydw)Hp-@QDQ-ml~ zqSEqY$&xLRgp#EwS>|^?Bj29y^ZWh&`hEZT-Iw#Z=bU@)`<#2vz2`F@Fc=I$=7zH9 zEF&}wCIEwaDu;>22NO_$N5NnsR63Ix41>XF^k51R^sph_8g+Z;2aY-_m?*lT^9?u}sNRW+C5uM5)14cfW&IkQ_*c!y;F%=@41ld3h8kY=W(-6zN5S7FA zqXE8!!{zW3vaE;IK}iEV)c%gStZ4wtwg)UkQ2Xx|%lcnWB_0n5MgY|s?rf>e8-S_! zgZ|T{OJNvaJ#08O37i0!3~b9ZY$|Gf$7DZ|2Z zSfGd8LL~3UW&hlDHzgPhBA60~%g+d4`8L~OFo`P27AzFX6x3Gc+jEFq2oHvkkx^3m zU+LG#FYcE;fEywF^0{ppA7r2J$Nc=i%Ru7m`7wbw{=biJ(*Dn`=Rb}2f8AgGw_tss zn(*_b0?rTt$WU83L*RTtJX{Ej9p#TKKY(6*H_)p9(Fl+_AQ?a*fYt$$1tbl~0nnPC zyd>y116utz*%k2eKMAro1q9hcSdi@Wla~TLG@lL#viAW5-3K{95MK1p9-0Hm{(vA1 z=zKykDguJ$y8zMzv=U!A;Gu#5&4aKC0c`;UVJiTF_5%S(7ZA8(1SaUA2KGcG1N6)w zA{P&Oe>#cZLu2ZHuXLa~vhgey4H{T!=G5hKiZ0?ZA;8~=c>ZJn3W^V?f>xlklMpC< z6MYl{jYJzFQD`(02?oW;Y!WD(@~i1!3dr1yh%k>g)oVLiJKSYonWp<1(Y5LGLym&-CYFgSALh(1)dnKV2@pUL(&fV}8axO5t@VY0YXCWB*+AmIJ*1PlrR zN;3wHAd>uOOhNz#WsWpQBJd16EtEsTAVYv0f_Ab=qo5805}cshxLF+}*`SfPNY62Z>-;qXK}iwgk#aDG%g2XaDXlfc4Ih$AGb zKZWZDI3|n4!1*&-V02jtttx;N3a~MTVCR-u9C(=m5y2sl7$iav7h{Bk!ery2J!O+P z6fm7l!2N5vkS&{lA+X5^I(P+QU5Fr}?1vU{+!%;xa86Z&zGL;5?1pr(s z3*;J{D{vG*#P~pPjG#jS3kP>^FDdRM%ysEX0&44NNz24G*;IkbB^i72%&+&W1*ow(NE!O&; z)2M5&EELX*7Ztk`UHeE!#iKXM1clu)0prGA{3h>HT4SM1G1+C2_Ut$6@t03HrlFY( z+b`uAnz@svL#MfoV&Z1nKL&}z4N19yS+DYk&ibnxAB$P-bg=T$Oqn@)=NR{o?(dhX zS<{w}d3yarGx~MM{yevCM8r#;{4B|?cWkf5kav=p@_3`YaQOO9uTU4w{hT>hRn@OD zy<*ExCp~+UC!0OfdBfmtXQ`5P&1FT^id}`JGd=YhR_@*>R;RxbR<|0+AnW&=C`OqV zjkbh8ZajAOti&oAH4~k2x9@F%4abw*zRJtxNm*_DXq%d*?9!v>tuSG$IPrSdKzq{g zri9X+^{<+5m)EzEF6fNk3fX2)DVbSgBP1PnO4Y$U3pE%sX!QQXo;0zk@5k;v;oK}; z%y{Q`9##L;#A8>@`@^OSAF5>P)_F$Q+`y(9MK+w5oT1Y9h-6aJuHG>33y0sdSSTYG z8Hm-!h*PuM3J)M`UZ{^XDcR>7>Z!1MMpX(umr7lzRZhP5xi~DOWxu$Y`TaF(&g_Zp zo=B9b#wp)A(Rb79W6PFk=~j=3gKNKE9SW0ql2AfEN_gBWx3xMVKjjuqfhTHUS1*)S zWQAGstrnj(Xzt67*)MDxYoxLfX&uGt&E# z(r4NaZPfqxKKxN^nJWUbs_I?rsr`SADr)P+JDYWN3oGizxlO*DcMW(HCz39Ky?3}F zpcR|pSKVS?`D4jF?o6D~Tyf(e{dZ{}q6B@D+`i<#F8Q2O+cwo?k#Of!R7mFRBrm+7 zPTrK!icu_7v75@jo9rGn+Rr%rT0e%Z+%dM8`?Mn{e5dSb-8Sj?k%c$b0ckH{0vbJ~ zZfkV7d+Io%Ehe5cJ38OfIr&%FZWXVi5?cyJ6LbeY9!|20`TR27Z4CeYRh!g(2U7Xe zmYanO2cpa`*j-*X(%R>LePlKM$5+dz-C51@_X?%*+E3#A_DD{7s*cPCeaVb0f z=8XE52!e-f_2NE_Aez2TNrb-6{Xk_;Iwxfq{T_MSZ}D^Mxeak1X2jz%4E?>XL-#SH zNOG(|V|P*U+e0k}+)|{L)YK*sUKj6ac0Nyg*SUEjHSLwjKq5YFzov!%ql&Sr;odXu z`yNM!+)X_0viY*ev%1*4f!Xvkh1}J&>T7Ods-j8iH%3c%zquq1U+iyBpUa**F?;z> zv;OM`jWtRyulla=@OIb9dTX2|r9${l#T`}ev{v7wE87{5H2NJs+s8ka)0j*8_xF4Mv_(Ji`;vTUFCWTFO zBm@q6`MrY|(ZXPC8L!E*-A9;t&v%9FP15L7S62|SbJSA1J>+?`#7n&Am0XwI(}#9` zDM$f>*TI@# zkD2wD2T^ulr~W+eXn64jeUoV$xzw0F8F|G--1x*GEc%O=>8#AUHH5;&6pPA)UC81q zUuiaywGP7*)h|Vdc6%u!Fj&X6YSrK3gPgbM47_j@QOrF4=-#4a;>1LuWaKy48s8s= zN2rtoF>dQsjvo3pMtMDg$=TOFm}h*Lr!;B%A!(F)dCk`VEwKl@B%xtGhO& z+RS0Ls1J0Gmr|H`{3`tIg2Dyd%qYd|g)@U;!P*|McjqRhJ02&H3K8O&8*8qHglb4s zojZd%8J*Yk#n<(9Sz#v;RG50es?(e`J@+p+xcj{ZLJidP-lA9Inl~6vu<8+^t^tz%x z#?~%7VlCN)rL`{XR=#ek_Vbh9(LK6T_IU+CJJ%mdogg=C`oo@8ax!1A@x_Avr=!^G zakmB@WY&mXR%rFU8b7D1(qk5X{2b3wnyK)%}RYj;8EG$D?#6y6UH>Ub+%fxG+{2?sx8e9O&tJpRN>ipt}9Po_N*mU z@=4l(_R*0csfohxo$gjNCGY_OlZ0mzYtf(n z0h=9TyGGX)wz1;(1*z6Or5EzvNL~U1tKr!NUET;XVM8!e&3SRRAHVpO$7oA3?y;DCBxGtp6bp#o*Z=fnPy=z;DE6 zPOdl=pDGA1S=U~U>xA)Q(i3|q@!dNHZdU-SRoI->d_;jBK3t9-1ZU!KX`T<4W3U3Z z3!7!M0w>pHeSKnaMAf4PjZ;{NF+y$bs(K?gw4rUfU7dw|D z;(!pEhU?s&fM|%#3i($Q%;4$<;l`25TGcN;OVe`-_H!PDw8tnjXU|>FV=l~I&rDM^ z7-|4_7VKM28sFQ}cJ@FHP)NdaDj-))POEObT6R-u!-K2WTt7VrM0;#j&5E1#Ft5({ z)dhRKOUdfnUt0-aL*f$c&g|&xSZnq{c74;F24~dSp*8)QW)w?5XflrDz&mzTYeKVr z9(jFTDC7#8(+&BCbDJ#Pfh-QsnS)&OlOzVunTK}R01QyESxZLw591Sg-_wR~qtpU# z!|(a1MB%R64qjkB(6I2UKCThY$+GdR_>g;`ZNRC0zt$^mSFv*TRhMGdrR1nTB`#}- zC&SDxe3hc7o_-J(aqEhT%^L~0VeX`r*TQ5nVUPcniVM93BhZe>z_V4sf>U$HtR%~Z zZ2K&M&J&v{fRPglTO5FGelsp}gj}u(SNWc7q(^Q)aX4d8uE5Z)n?3BkQPnWHIe4jJ z#HUxeGl;{R+J1BOEV5R~Q()EnJFV8?o-^yWn#ar@lwYfG)iG&<8U!tm%|_T7Il00E z3e`2TsH2dS_5q;0V9y^q5*#F+Eh%_*_l#@TK*q zCq-&TIhBJ|b(6C1_Hh>0O&ku^rv%n*j7+6{o6eI}!?gtI#_NQGxRjuR1@bOr`s{?P z>Y%Ug7bPZE4ICyHq>-tPRMm}s}0*SupkD&$zOqzU3O)alHa_^a{MU(dGl5>v$ zvN}}jKmivr^=1l$F%n<+pv0LH$|7ehw@KuR70(Om0Hf7#ehCyLS$k<%Pe}uf1e{+5 zeUD40gaff;xe%`BEu0j9Wo0#;>5a&36*!39@`3(2*W1t2Ry0cfy!pe;XUGZpbAu0c zBe;IS-KU+@_I$xM>&y!U&{`~Meob<8{w(i=5s9@y|MkQ zC$V+g*6Sx6G^>jiubo~ivP;8vQmKEJYpfNBS?_1H6;ZR2t@hcLEOvQasO(c@`#GIN znh3`9@ZvF_r3zlE219<-@rCO0n)#*JSI%-6h|=&JP=!UFUGuKUkp5#8^l!7gyFC}2>2}J~uD{0xWyFsBF?k~+5Anv>0CnzGEDmk;$0ux_xI_AaL?Zi+|E)>w zP|hU~rq<8OFJ#`G<@>TOan;8=$9Hr*?kIZsO6k}}qfesTvP6oX!3Z#wUw$WuP)`a= z(Ql-}HdOAx)dKw*cn)|s2vsLnc0DgM7yUG;4wN`-RyC+gJH8;q745HDM3;$2om>}9 znnzmNs-L|PdP7k(JX-ggglW_d>@YR7d8}7?{=!I_f63~5olTVD^z9p)LoGzz`<>pN z?c2BhYbJW~zJY<%k-i>lXHRaed0sVys`V wgKDQXJm&{U%C+;G?Bbi3dS}Yl_|$vC=j=;}+vMlt)FVvCf}J8y&RaSC7ZhBozW@LL literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/raw/zuohuandao.mp4 b/core/function-impl/mogo-core-function-map/src/main/res/raw/zuohuandao.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..3d97192ffec8c8d6774cadcfbea3165659f23f37 GIT binary patch literal 6071 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/values/attrs.xml b/core/function-impl/mogo-core-function-map/src/main/res/values/attrs.xml index be76c98da4..5cd432d06c 100644 --- a/core/function-impl/mogo-core-function-map/src/main/res/values/attrs.xml +++ b/core/function-impl/mogo-core-function-map/src/main/res/values/attrs.xml @@ -84,7 +84,7 @@ - /> + \ No newline at end of file diff --git a/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/media/video/CustomManager.kt b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/media/video/CustomManager.kt new file mode 100644 index 0000000000..7a0a6ae14e --- /dev/null +++ b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/media/video/CustomManager.kt @@ -0,0 +1,183 @@ +package com.mogo.eagle.core.widget.media.video + +import android.app.Activity +import android.content.Context +import android.text.TextUtils +import android.view.View +import android.view.ViewGroup +import android.view.Window +import com.mogo.eagle.core.widget.R +import com.shuyu.gsyvideoplayer.GSYVideoBaseManager +import com.shuyu.gsyvideoplayer.player.IPlayerManager +import com.shuyu.gsyvideoplayer.player.IjkPlayerManager +import com.shuyu.gsyvideoplayer.utils.CommonUtil +import com.shuyu.gsyvideoplayer.video.base.GSYVideoPlayer + +/** + * 多个播放的管理器 + * Created by guoshuyu on 2018/1/31. + */ +class CustomManager : GSYVideoBaseManager() { + init { + init() + } + + override fun getPlayManager(): IPlayerManager { + return IjkPlayerManager() + } + + /** + * 暂停播放 + */ + fun onPause(key: String?) { + if (getCustomManager(key).listener() != null) { + getCustomManager(key).listener().onVideoPause() + } + } + + /** + * 恢复播放 + */ + fun onResume(key: String?) { + if (getCustomManager(key).listener() != null) { + getCustomManager(key).listener().onVideoResume() + } + } + + + /** + * 恢复暂停状态 + * + * @param seek 是否产生seek动作,直播设置为false + */ + fun onResume(key: String?, seek: Boolean) { + if (getCustomManager(key).listener() != null) { + getCustomManager(key).listener().onVideoResume(seek) + } + } + + + companion object { + val SMALL_ID: Int = R.id.custom_small_id + + val FULLSCREEN_ID: Int = R.id.custom_full_id + + var TAG: String = "GSYVideoManager" + + private val sMap: MutableMap = HashMap() + + + /** + * 退出全屏,主要用于返回键 + * + * @return 返回是否全屏 + */ + fun backFromWindowFull(context: Context?, key: String?): Boolean { + var backFrom = false + val vp = + CommonUtil.scanForActivity(context) + .findViewById(Window.ID_ANDROID_CONTENT) as ViewGroup + val oldF = vp.findViewById(FULLSCREEN_ID) + if (oldF != null) { + backFrom = true + CommonUtil.hideNavKey(context) + if (getCustomManager(key).lastListener() != null) { + getCustomManager(key).lastListener().onBackFullscreen() + } + } + return backFrom + } + + /** + * 页面销毁了记得调用是否所有的video + */ + fun releaseAllVideos(key: String?) { + if (getCustomManager(key).listener() != null) { + getCustomManager(key).listener().onCompletion() + } + getCustomManager(key).releaseMediaPlayer() + } + + + /** + * 单例管理器 + */ + @Synchronized + fun instance(): Map { + return sMap + } + + /** + * 单例管理器 + */ + @Synchronized + fun getCustomManager(key: String?): CustomManager { + check(key != null && !TextUtils.isEmpty(key)) { "key not be empty" } + var customManager: CustomManager? = sMap[key] + if (customManager == null) { + customManager = CustomManager() + sMap[key] = customManager + } + return customManager + } + + fun onPauseAll() { + if (sMap.isNotEmpty()) { + for ((key, value) in sMap.entries) { + value.onPause(key) + } + } + } + + fun onResumeAll() { + if (sMap.isNotEmpty()) { + for ((key, value) in sMap.entries) { + value.onResume(key) + } + } + } + + /** + * 恢复暂停状态 + * + * @param seek 是否产生seek动作 + */ + fun onResumeAll(seek: Boolean) { + if (sMap.isNotEmpty()) { + for ((key, value) in sMap.entries) { + value.onResume(key, seek) + } + } + } + + fun clearAllVideo() { + if (sMap.isNotEmpty()) { + for ((key) in sMap.entries) { + releaseAllVideos(key) + } + } + sMap.clear() + } + + fun removeManager(key: String?) { + sMap.remove(key) + } + + /** + * 当前是否全屏状态 + * + * @return 当前是否全屏状态, true代表是。 + */ + fun isFullState(activity: Activity?): Boolean { + val vp = + CommonUtil.scanForActivity(activity) + .findViewById(Window.ID_ANDROID_CONTENT) as ViewGroup + val full = vp.findViewById(FULLSCREEN_ID) + var gsyVideoPlayer: GSYVideoPlayer? = null + if (full != null) { + gsyVideoPlayer = full as GSYVideoPlayer + } + return gsyVideoPlayer != null + } + } +} \ No newline at end of file diff --git a/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/media/video/MultiVideoPlayer.kt b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/media/video/MultiVideoPlayer.kt new file mode 100644 index 0000000000..7c22157c32 --- /dev/null +++ b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/media/video/MultiVideoPlayer.kt @@ -0,0 +1,205 @@ +package com.mogo.eagle.core.widget.media.video + +import android.content.Context +import android.graphics.Point +import android.media.AudioManager +import android.media.AudioManager.OnAudioFocusChangeListener +import android.text.TextUtils +import android.util.AttributeSet +import android.view.MotionEvent +import android.view.Surface +import android.view.View +import android.widget.ImageView +import com.mogo.eagle.core.widget.R +import com.shuyu.gsyvideoplayer.utils.Debuger +import com.shuyu.gsyvideoplayer.utils.GSYVideoType +import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer +import com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer +import com.shuyu.gsyvideoplayer.video.base.GSYVideoViewBridge + +/** + * 多个同时播放的播放控件 + */ +class MultiVideoPlayer : StandardGSYVideoPlayer { + private lateinit var start: ImageView + + private var mCoverOriginUrl: String? = null + + private var mDefaultRes: Int = 0 + + var enableDoubleClick = false + + /** + * 圆角尺寸 + */ + var outLinePixel = 0f + + constructor(context: Context?, fullFlag: Boolean?) : super(context, fullFlag) + + constructor(context: Context?) : super(context) + + constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) + + override fun init(context: Context) { + super.init(context) + start = findViewById(R.id.start) + if (mThumbImageViewLayout != null && + (mCurrentState == -1 || mCurrentState == CURRENT_STATE_NORMAL || mCurrentState == CURRENT_STATE_ERROR) + ) { + mThumbImageViewLayout.visibility = VISIBLE + } + onAudioFocusChangeListener = + OnAudioFocusChangeListener { focusChange -> + when (focusChange) { + AudioManager.AUDIOFOCUS_GAIN -> {} + AudioManager.AUDIOFOCUS_LOSS -> {} + AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {} + AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {} + } + } + } + + override fun getGSYVideoManager(): GSYVideoViewBridge { + CustomManager.getCustomManager(key).initContext(context.applicationContext) + return CustomManager.getCustomManager(key) + } + + override fun backFromFull(context: Context): Boolean { + return CustomManager.backFromWindowFull(context, key) + } + + override fun releaseVideos() { + CustomManager.releaseAllVideos(key) + } + + override fun getFullId(): Int { + return CustomManager.FULLSCREEN_ID + } + + override fun getSmallId(): Int { + return CustomManager.SMALL_ID + } + + override fun getLayoutId(): Int { + return R.layout.item_v2x_crossroad_live_video + } + + override fun startWindowFullscreen( + context: Context, + actionBar: Boolean, + statusBar: Boolean + ): GSYBaseVideoPlayer { + return super.startWindowFullscreen(context, actionBar, statusBar) + } + + override fun changeUiToCompleteShow() { + super.changeUiToCompleteShow() + mBottomContainer?.visibility = View.INVISIBLE + mProgressBar?.visibility = View.GONE + } + + override fun hideAllWidget() { + super.hideAllWidget() + mBottomContainer?.visibility = View.INVISIBLE + mProgressBar?.visibility = View.GONE + } + + override fun changeUiToPrepareingClear() { + super.changeUiToPrepareingClear() + mBottomContainer?.visibility = View.INVISIBLE + mProgressBar?.visibility = View.GONE + } + + override fun changeUiToPlayingBufferingClear() { + super.changeUiToPlayingBufferingClear() + mBottomContainer?.visibility = View.INVISIBLE + mProgressBar?.visibility = View.GONE + } + + override fun changeUiToClear() { + super.changeUiToClear() + mBottomContainer?.visibility = View.INVISIBLE + mProgressBar?.visibility = View.GONE + } + + override fun changeUiToCompleteClear() { + super.changeUiToCompleteClear() + mBottomContainer?.visibility = View.INVISIBLE + mProgressBar?.visibility = View.GONE + } + + override fun showWifiDialog() { + //直接播放,不显示WIFI对话框 + startPlayLogic() + } + + override fun updateStartImage() { + // do nothing + // 不显示暂停、开始等按钮 + } + + override fun onSurfaceUpdated(surface: Surface?) { + super.onSurfaceUpdated(surface) + if (mThumbImageViewLayout != null && mThumbImageViewLayout.visibility == View.VISIBLE) { + mThumbImageViewLayout.visibility = View.INVISIBLE + } + } + + override fun onSurfaceAvailable(surface: Surface?) { + super.onSurfaceAvailable(surface) + mProgressBar?.visibility = View.GONE + if (GSYVideoType.getRenderType() != GSYVideoType.TEXTURE) { + if (mThumbImageViewLayout != null && mThumbImageViewLayout.visibility == View.VISIBLE) { + mThumbImageViewLayout.visibility = View.INVISIBLE + } + } + } + + override fun touchDoubleUp(e: MotionEvent?) { + if (enableDoubleClick) { + super.touchDoubleUp(e) + } + } + + override fun setViewShowState(view: View?, visibility: Int) { + if (view === mThumbImageViewLayout && visibility != View.VISIBLE) { + return + } + super.setViewShowState(view, visibility) + } + + override fun showSmallVideo( + size: Point, + actionBar: Boolean, + statusBar: Boolean + ): GSYBaseVideoPlayer { + //下面这里替换成你自己的强制转化 + val multiSampleVideo = super.showSmallVideo(size, actionBar, statusBar) as MultiVideoPlayer + multiSampleVideo.mStartButton.visibility = GONE + multiSampleVideo.mStartButton = null + return multiSampleVideo + } + + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { + super.onSizeChanged(w, h, oldw, oldh) + if (!mIfCurrentIsFullscreen && outLinePixel > 0) { + this.outlineProvider = TextureVideoViewOutlineProvider(outLinePixel) + this.clipToOutline = true + } + } + + val key: String + get() { + if (mPlayPosition == -22) { + Debuger.printfError(javaClass.simpleName + " used getKey() " + "******* PlayPosition never set. ********") + } + if (TextUtils.isEmpty(mPlayTag)) { + Debuger.printfError(javaClass.simpleName + " used getKey() " + "******* PlayTag never set. ********") + } + return TAG + mPlayPosition + mPlayTag + } + + companion object { + private const val TAG = "MultiSampleVideo" + } +} \ No newline at end of file diff --git a/core/mogo-core-res/src/main/res/values/ids.xml b/core/mogo-core-res/src/main/res/values/ids.xml index 8e5665ea02..d65c7ecfec 100644 --- a/core/mogo-core-res/src/main/res/values/ids.xml +++ b/core/mogo-core-res/src/main/res/values/ids.xml @@ -8,4 +8,6 @@ + + \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index c169035b1b..320ac709db 100644 --- a/gradle.properties +++ b/gradle.properties @@ -83,8 +83,8 @@ MOGO_TELEMATIC_VERSION=1.4.7.65 MOGO_SKIN_VERSION=1.4.7.50 ######## MogoAiCloudSDK Version ######## # 自研地图 -MAP_SDK_VERSION=multi-3.5.0.4 -MAP_SDK_CORE_VERSION=multi-3.5.0.4 +MAP_SDK_VERSION=multi-3.5.0.6 +MAP_SDK_CORE_VERSION=multi-3.5.0.5 MAP_SDK_DATA_VERSION=1.0.0.9 MAP_SDK_OPERATION_VERSION=1.1.4.1 # websocket diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.kt b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.kt index cefa4089e1..adaefca57d 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.kt +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.kt @@ -80,4 +80,6 @@ interface IMogoMap { fun toScreenLocations(data: List): List fun toScreenLocation(lon: Double, lat: Double): android.graphics.Point? + + fun isInCurrentFrame(lon: Double, lat: Double): Boolean } \ No newline at end of file diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.kt b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.kt index 77df2349d5..19f65a763e 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.kt +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapWrapper.kt @@ -268,4 +268,8 @@ class AMapWrapper(map: MapAutoViewHelper?, mapView: MapAutoView, controller: IMo } } } + + override fun isInCurrentFrame(lon: Double, lat: Double): Boolean { + return mMapView.getMapController()?.isInCurrentFrame(lon, lat) ?: false + } } \ No newline at end of file