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 0000000000..f6ca8c493a
Binary files /dev/null and b/core/function-impl/mogo-core-function-map/src/main/res/raw/chu_zhan.mp4 differ
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 0000000000..23891a494d
Binary files /dev/null and b/core/function-impl/mogo-core-function-map/src/main/res/raw/lukouyouzhuan.mp4 differ
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 0000000000..62b73465fc
Binary files /dev/null and b/core/function-impl/mogo-core-function-map/src/main/res/raw/lukouzhixing.mp4 differ
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 0000000000..4aa1d394d2
Binary files /dev/null and b/core/function-impl/mogo-core-function-map/src/main/res/raw/lukouzuozhuan.mp4 differ
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 0000000000..0edfbacb3e
Binary files /dev/null and b/core/function-impl/mogo-core-function-map/src/main/res/raw/wujuece.mp4 differ
diff --git a/core/function-impl/mogo-core-function-map/src/main/res/raw/youbizhang.mp4 b/core/function-impl/mogo-core-function-map/src/main/res/raw/youbizhang.mp4
new file mode 100644
index 0000000000..f4d2f94f20
Binary files /dev/null and b/core/function-impl/mogo-core-function-map/src/main/res/raw/youbizhang.mp4 differ
diff --git a/core/function-impl/mogo-core-function-map/src/main/res/raw/youhuandao.mp4 b/core/function-impl/mogo-core-function-map/src/main/res/raw/youhuandao.mp4
new file mode 100644
index 0000000000..e40d4949ad
Binary files /dev/null and b/core/function-impl/mogo-core-function-map/src/main/res/raw/youhuandao.mp4 differ
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 0000000000..8dce6827bd
Binary files /dev/null and b/core/function-impl/mogo-core-function-map/src/main/res/raw/zhixing.mp4 differ
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 0000000000..7e2eeb9987
Binary files /dev/null and b/core/function-impl/mogo-core-function-map/src/main/res/raw/zuobizhang.mp4 differ
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 0000000000..3d97192ffe
Binary files /dev/null and b/core/function-impl/mogo-core-function-map/src/main/res/raw/zuohuandao.mp4 differ
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