diff --git a/OCH/bus/driver/src/main/res/layout/bus_base_fragment.xml b/OCH/bus/driver/src/main/res/layout/bus_base_fragment.xml index 0bab6f9d11..ab3db7be7a 100644 --- a/OCH/bus/driver/src/main/res/layout/bus_base_fragment.xml +++ b/OCH/bus/driver/src/main/res/layout/bus_base_fragment.xml @@ -221,6 +221,15 @@ android:layout_marginTop="-24dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@id/module_mogo_och_autopilot_status" /> + + + + - - - + app:layout_constraintLeft_toRightOf="@id/toolsView" /> + + - - - diff --git a/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt b/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt index 73fdd2c46e..7aeb823941 100644 --- a/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt +++ b/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.mogo.eagle.core.data.enums.DataSourceType import com.mogo.eagle.core.data.enums.EventTypeEnumNew import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.function.angle.scenes.CrossRoad +import com.mogo.eagle.core.function.angle.scenes.Default +import com.mogo.eagle.core.function.angle.scenes.LongSight import com.mogo.eagle.core.function.api.hmi.xiaozhi.event.V2N import com.mogo.eagle.core.function.api.hmi.xiaozhi.state.State import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager @@ -23,6 +26,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerPlanningActionsListener import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.function.call.map.CallerMapRomaListener +import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.ActivityUtils @@ -57,6 +61,7 @@ object DebugDataDispatch { const val stopSite = "stopSite" const val v2N = "xiaozhiV2N" const val romal = "romal" + const val visualView = "visual" // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "location" --es path "1111/11111" // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "globalPath" --es path "sy73.json" @@ -69,6 +74,7 @@ object DebugDataDispatch { // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "stopSite" --ei state 6 --ei action 1 // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "xiaozhiV2N" --es poiType "10002" --ei state 0 // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "romal" --ei show 0 +// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "visual" --ei show 0 val ROOT_PATH = @@ -170,6 +176,22 @@ object DebugDataDispatch { pncAction.parkScenarioAction = planningaction.build() CallerPlanningActionsListenerManager.invokePNCActions(pncAction.build()) } + visualView ->{ + val state = intent.getIntExtra("show", 0) + when (state) { + 0 -> { + CallerVisualAngleManager.changeScene(LongSight(0)) + } + 1 -> { + CallerVisualAngleManager.changeScene(Default(0)) + } + 2 -> { + CallerVisualAngleManager.changeScene(CrossRoad(0)) + } + else -> {} + } + + } romal ->{ val state = intent.getIntExtra("show", 0) CallerMapRomaListener.invokeMapRomaRange(state==0) diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/map/switchvisual/SeekBarView.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/map/switchvisual/SeekBarView.kt index 20323a5fce..c27788d5d5 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/map/switchvisual/SeekBarView.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/map/switchvisual/SeekBarView.kt @@ -11,12 +11,19 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.view.MotionEvent import android.widget.ImageView +import androidx.annotation.DrawableRes import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.common.module.R +import kotlinx.android.synthetic.main.taxi_p_seekbar_visualangle.view.iv_visualangle_bg +import kotlinx.android.synthetic.main.taxi_p_seekbar_visualangle.view.iv_visualangle_value +import kotlinx.android.synthetic.main.taxi_seekbar_visualangle.view.iv_visualangle_bg_dark +import kotlinx.android.synthetic.main.taxi_seekbar_visualangle.view.iv_visualangle_value_dark import kotlin.properties.Delegates @@ -53,13 +60,6 @@ class SeekBarView : ConstraintLayout, VisualViewModel.IVisualCallback { override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - - val split = (height - draggableButton.height) / 3f - canvas.drawLine(0f,split,width.toFloat(),split,p) - canvas.drawLine(0f,split*2,width.toFloat(),split*2,p) - canvas.drawLine(0f,(height - draggableButton.height).toFloat(),width.toFloat(),split*3,p) - val translationY = draggableButton.translationY - canvas.drawLine(0f,translationY,width.toFloat(),translationY,p) } private var initialX = 0f @@ -82,12 +82,12 @@ class SeekBarView : ConstraintLayout, VisualViewModel.IVisualCallback { if(draggableButton.translationY<-draggableButton.height){ tempSet.clone(this) - tempSet.setTranslationY(R.id.iv_setting_only_value,-draggableButton.height.toFloat()) + tempSet.setTranslationY(draggableButton.id,-draggableButton.height.toFloat()) tempSet.applyTo(this) return true }else if (draggableButton.translationY>(height)){ tempSet.clone(this) - tempSet.setTranslationY(R.id.iv_setting_only_value,(height).toFloat()) + tempSet.setTranslationY(draggableButton.id,(height).toFloat()) tempSet.applyTo(this) return true } @@ -98,7 +98,7 @@ class SeekBarView : ConstraintLayout, VisualViewModel.IVisualCallback { initialY = event.rawY; tempSet.clone(this) - tempSet.setTranslationY(R.id.iv_setting_only_value,draggableButton.translationY+dy) + tempSet.setTranslationY(draggableButton.id,draggableButton.translationY+dy) tempSet.applyTo(this) } MotionEvent.ACTION_UP -> { @@ -178,10 +178,31 @@ class SeekBarView : ConstraintLayout, VisualViewModel.IVisualCallback { private lateinit var draggableButton:ImageView private fun initView() { - LayoutInflater.from(context).inflate(R.layout.taxi_p_seekbar_visualangle, this, true) - draggableButton = findViewById(R.id.iv_setting_only_value) + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + LayoutInflater.from(context).inflate(R.layout.taxi_seekbar_visualangle, this, true) + draggableButton = findViewById(R.id.iv_visualangle_value_dark) + }else{ + LayoutInflater.from(context).inflate(R.layout.taxi_p_seekbar_visualangle, this, true) + draggableButton = findViewById(R.id.iv_visualangle_value) + } } + fun setBgResource(@DrawableRes resource:Int){ + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + iv_visualangle_bg_dark.setImageResource(resource) + }else{ + iv_visualangle_bg.setImageResource(resource) + } + } + fun setHumbResource(@DrawableRes resource:Int){ + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + iv_visualangle_value_dark.setImageResource(resource) + }else{ + iv_visualangle_value.setImageResource(resource) + } + } + + override fun onAttachedToWindow() { super.onAttachedToWindow() viewModel = findViewTreeViewModelStoreOwner()?.let { diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/map/switchvisual/VisualViewDirver.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/map/switchvisual/VisualViewDirver.kt new file mode 100644 index 0000000000..988b4e8e41 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/map/switchvisual/VisualViewDirver.kt @@ -0,0 +1,67 @@ +package com.mogo.och.common.module.wigets.map.switchvisual + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.och.common.module.R +import kotlinx.android.synthetic.main.common_visualangle_black.view.iv_center_location_bg +import kotlinx.android.synthetic.main.common_visualangle_black.view.iv_visual_angle_title_bottom +import kotlinx.android.synthetic.main.common_visualangle_black.view.iv_visual_angle_title_head +import kotlinx.android.synthetic.main.common_visualangle_black.view.iv_visual_angle_title_value_bg + + +class VisualViewDirver : ConstraintLayout { + + private val TAG = "LeftBarView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + init { + } + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.common_visualangle_black, this, true) + + iv_visual_angle_title_value_bg.enableCallback = object :SeekBarView.EnableCallback{ + override fun enableChangeListener(enable: Boolean) { + if(enable){ + iv_visual_angle_title_head.setImageResource(R.drawable.commont_visual_head) + iv_visual_angle_title_bottom.setImageResource(R.drawable.common_visual_bottom) + iv_visual_angle_title_value_bg.setBgResource(R.drawable.common_visual_angle_bg) + iv_visual_angle_title_value_bg.setHumbResource(R.drawable.common_visual_angle) + iv_center_location_bg.setImageResource(R.drawable.common_visualangle_bg) + }else{ + iv_visual_angle_title_head.setImageResource(R.drawable.commont_visual_head_unable) + iv_visual_angle_title_bottom.setImageResource(R.drawable.common_visual_bottom_unenable) + iv_visual_angle_title_value_bg.setBgResource(R.drawable.common_visual_angle_bg_unenable) + iv_visual_angle_title_value_bg.setHumbResource(R.drawable.common_visual_angle_unenable) + iv_center_location_bg.setImageResource(R.drawable.common_visualangle_bg_unenable) + } + } + } + } + + override fun onVisibilityAggregated(isVisible: Boolean) { + super.onVisibilityAggregated(isVisible) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + } + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_visual_angle.png b/OCH/common/common/src/main/res/drawable-nodpi/common_visual_angle.png new file mode 100755 index 0000000000..f2ea150dff Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_visual_angle.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_visual_angle_bg.png b/OCH/common/common/src/main/res/drawable-nodpi/common_visual_angle_bg.png new file mode 100755 index 0000000000..386839b12e Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_visual_angle_bg.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_visual_angle_bg_unenable.png b/OCH/common/common/src/main/res/drawable-nodpi/common_visual_angle_bg_unenable.png new file mode 100644 index 0000000000..80df6287df Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_visual_angle_bg_unenable.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_visual_angle_unenable.png b/OCH/common/common/src/main/res/drawable-nodpi/common_visual_angle_unenable.png new file mode 100644 index 0000000000..c80017aeed Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_visual_angle_unenable.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_visual_bottom.png b/OCH/common/common/src/main/res/drawable-nodpi/common_visual_bottom.png new file mode 100755 index 0000000000..13076e27b6 Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_visual_bottom.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_visual_bottom_unenable.png b/OCH/common/common/src/main/res/drawable-nodpi/common_visual_bottom_unenable.png new file mode 100644 index 0000000000..de0caf66ae Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_visual_bottom_unenable.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_visualangle_bg.png b/OCH/common/common/src/main/res/drawable-nodpi/common_visualangle_bg.png new file mode 100644 index 0000000000..aa30746eb0 Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_visualangle_bg.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_visualangle_bg_unenable.png b/OCH/common/common/src/main/res/drawable-nodpi/common_visualangle_bg_unenable.png new file mode 100644 index 0000000000..e7421ad3db Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_visualangle_bg_unenable.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/commont_visual_head.png b/OCH/common/common/src/main/res/drawable-nodpi/commont_visual_head.png new file mode 100755 index 0000000000..fa95919a55 Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/commont_visual_head.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/commont_visual_head_unable.png b/OCH/common/common/src/main/res/drawable-nodpi/commont_visual_head_unable.png new file mode 100644 index 0000000000..ffac29ef2c Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/commont_visual_head_unable.png differ diff --git a/OCH/common/common/src/main/res/layout/common_visualangle_black.xml b/OCH/common/common/src/main/res/layout/common_visualangle_black.xml new file mode 100644 index 0000000000..69a1e5df26 --- /dev/null +++ b/OCH/common/common/src/main/res/layout/common_visualangle_black.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/common/common/src/main/res/layout/taxi_p_seekbar_visualangle.xml b/OCH/common/common/src/main/res/layout/taxi_p_seekbar_visualangle.xml index 4c1bc8426c..55f173c633 100644 --- a/OCH/common/common/src/main/res/layout/taxi_p_seekbar_visualangle.xml +++ b/OCH/common/common/src/main/res/layout/taxi_p_seekbar_visualangle.xml @@ -7,7 +7,7 @@ tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"> diff --git a/OCH/shuttle/driver/src/main/res/layout/shuttle_base_fragment.xml b/OCH/shuttle/driver/src/main/res/layout/shuttle_base_fragment.xml index 4e8489372e..a20568f292 100644 --- a/OCH/shuttle/driver/src/main/res/layout/shuttle_base_fragment.xml +++ b/OCH/shuttle/driver/src/main/res/layout/shuttle_base_fragment.xml @@ -198,6 +198,14 @@ app:layout_constraintTop_toBottomOf="@id/module_mogo_och_autopilot_status" app:layout_goneMarginTop="@dimen/module_mogo_och_station_panel_container_margin_top_no_call" /> + + + - - - - diff --git a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/cloud/model/SweeperCloudTaskModel.java b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/cloud/model/SweeperCloudTaskModel.java index 6fcaf29aa3..d59f3ac076 100644 --- a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/cloud/model/SweeperCloudTaskModel.java +++ b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/cloud/model/SweeperCloudTaskModel.java @@ -792,4 +792,9 @@ public class SweeperCloudTaskModel implements IMoGoSweeperFutianCloudTaskListene public void onAutopilotTrajectoryDownloadReq(@NonNull AutopilotControlParameters.AutoPilotLine autoPilotLine, int downloadType) { } + + @Override + public void onFsmReceiveTimeout(boolean isTimeout) { + + } } diff --git a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/operate/presenter/SweeperOperatePresenter.java b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/operate/presenter/SweeperOperatePresenter.java index 130c155a68..764942e060 100644 --- a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/operate/presenter/SweeperOperatePresenter.java +++ b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/operate/presenter/SweeperOperatePresenter.java @@ -469,4 +469,9 @@ public class SweeperOperatePresenter extends Presenter @Override public void onAutopilotTrajectoryDownloadReq(@NonNull AutopilotControlParameters.AutoPilotLine autoPilotLine, int downloadType) { } + + @Override + public void onFsmReceiveTimeout(boolean isTimeout) { + + } } diff --git a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java index f4ce741997..bb72a7c676 100644 --- a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java +++ b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java @@ -195,7 +195,6 @@ public abstract class BaseTaxiTabFragment + + + - - - + app:layout_constraintLeft_toRightOf="@id/toolsView" /> { diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/bar/LeftBarView.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/bar/LeftBarView.kt index 99618fa399..55b4ae0a25 100644 --- a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/bar/LeftBarView.kt +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/bar/LeftBarView.kt @@ -8,7 +8,6 @@ import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.och.common.module.wigets.map.switchvisual.SeekBarView import com.mogo.och.taxi.passenger.common.R -import kotlinx.android.synthetic.main.taxi_p_leftbar.view.iv_center_location import kotlinx.android.synthetic.main.taxi_p_leftbar.view.iv_center_location_bg import kotlinx.android.synthetic.main.taxi_p_leftbar.view.iv_visual_angle_title_bottom import kotlinx.android.synthetic.main.taxi_p_leftbar.view.iv_visual_angle_title_head diff --git a/OCH/taxi/pcommon/src/main/res/layout/taxi_p_rightbar.xml b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_rightbar.xml index 36e55e319b..b12099d8b8 100644 --- a/OCH/taxi/pcommon/src/main/res/layout/taxi_p_rightbar.xml +++ b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_rightbar.xml @@ -58,13 +58,13 @@ + app:layout_constraintBottom_toBottomOf="@+id/iv_visualangle_bg" + app:layout_constraintStart_toStartOf="@+id/iv_visualangle_bg" + app:layout_constraintEnd_toEndOf="@+id/iv_visualangle_bg" + app:layout_constraintTop_toTopOf="@+id/iv_visualangle_bg" /> \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/layout/taxi_p_seekbar_.xml b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_seekbar_.xml index 693d5af861..cf8aac9f7d 100644 --- a/OCH/taxi/pcommon/src/main/res/layout/taxi_p_seekbar_.xml +++ b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_seekbar_.xml @@ -7,7 +7,7 @@ tools:parentTag="androidx.constraintlayout.motion.widget.MotionLayout"> + + - - diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt index c4c3ac1eee..2109243055 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt @@ -6,6 +6,7 @@ import android.os.Message import android.text.TextUtils import android.util.Log import androidx.core.util.Pair +import com.mogo.commons.voice.AIAssist import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.enums.CommunicationType import com.mogo.eagle.core.data.enums.DataSourceType @@ -33,7 +34,9 @@ import com.mogo.eagle.core.function.call.hmi.CallerRoadV2NEventWindowListenerMan import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager.saveMsgBox import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.Logger +import com.mogo.eagle.core.utilcode.util.AppStateManager import com.mogo.eagle.core.utilcode.util.CoordinateTransform import com.mogo.eagle.core.utilcode.util.CoordinateUtils import com.mogo.eagle.core.utilcode.util.DrivingDirectionUtils @@ -46,14 +49,17 @@ import com.mogo.eagle.function.biz.v2x.v2n.utils.EventDismissManager import com.mogo.eagle.function.biz.v2x.v2n.utils.IEventDismissListener import com.mogo.eagle.function.biz.v2x.v2n.utils.V2NUtils import com.mogo.eagle.function.biz.v2x.v2n.utils.V2XEventAnalyticsManager +import com.mogo.map.MapDataWrapper import com.mogo.map.entities.Lane import mogo.telematics.pad.MessagePad import mogo.telematics.pad.MessagePad.Header import mogo.telematics.pad.MessagePad.TrackedObject +import mogo.telematics.pad.MessagePad.V2nCrossSpeed import mogo.v2x.MogoV2X import mogo.v2x.MogoV2X.RSI_PB import mogo.v2x.MogoV2X.RTEData_PB import java.util.concurrent.TimeUnit.SECONDS +import kotlin.math.abs /** * V2N上车相关事件绘制 @@ -66,6 +72,7 @@ internal object V2NIdentifyDrawer: IEventDismissListener { private const val MSG_WHAT_DRAW_SHIGU = 0x1011 // 交通事故 private const val MSG_WHAT_DRAW_YONGDU = 0x1012 // 交通拥堵 private const val MSG_WHAT_DRAW_OTHER_RETROGRADE_VEHICLE = 0x1013 // 他车倒车/逆行 + private const val MSG_WHAT_DRAW_GREEN_WAVE = 0x1014 // 绿波通行 private val callback = Handler.Callback { msg -> if (msg.what == MSG_WHAT_DRAW_SHIGONE || msg.what == MSG_WHAT_DRAW_SHIGU) { @@ -156,33 +163,6 @@ internal object V2NIdentifyDrawer: IEventDismissListener { ) ) ) -// CallerHmiManager.warningV2X( -// poiType, -// alertContent, -// ttsContent, -// object : IMoGoWarningStatusListener { -// override fun onShow() { -// super.onShow() -// runCatching { CallerHmiManager.notifyXiaoZhiStatusChanged(V2N(EventTypeEnumNew.getEnumType(poiType)), State.START) } -// CallerVisualAngleManager.changeAngle( -// RoadEvent( -// itx.longitude, -// itx.latitude, -// itx.angle -// ) -// ) -// } -// -// override fun onDismiss() { -// super.onDismiss() -// runCatching { CallerHmiManager.notifyXiaoZhiStatusChanged(V2N(EventTypeEnumNew.getEnumType(poiType)), State.STOP) } -// CallerVisualAngleManager.changeAngle(Default()) -// } -// }, -// ALERT_WARNING_TOP, -// 10000, -// false -// ) if (polygon.isNotEmpty()) { val decision = V2NUtils.computeOccupyLanesInfo(Triple(car.longitude, car.latitude, car.heading.toFloat()), Triple(itx.longitude, itx.latitude, itx.heading.toFloat()), polygon.map { kotlin.Pair(it.first, it.second) }) if (decision != null) { @@ -377,6 +357,41 @@ internal object V2NIdentifyDrawer: IEventDismissListener { ) } + + if (msg.what == MSG_WHAT_DRAW_GREEN_WAVE) { + val data = msg.obj as? V2nCrossSpeed ?: return@Callback true + val destX = data.lng + val destY = data.lat + val id = "${destX}_${destY}" + AiRoadMarker.aiMakers.getOrPut(id) { + AiRoadMarker().apply { + try { + val location = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() + val current = abs(location.gnssSpeed) * 3.6f.toInt() + val min = abs(data.speedStraightMin * 3.6f).toInt() + val max = abs(data.speedStraightMax * 3.6f).toInt() + marker(Marker(id, EventTypeEnumNew.TYPE_SOCKET_ROAD_GREE_WAVE.poiType, destX, destY, 0.0, null, null, null), drawMarker = false, false) + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + AppStateManager.currentActivity()?.let { + val speakText = StringBuilder("保持当前车速即可通过路口,好丝滑!") + if (current < min) { + speakText.setLength(0) + speakText.append("蘑菇推荐您提升车速至${min}千米每小小, 当前车速${current}千米每小时") + } + if (current > max) { + speakText.setLength(0) + speakText.append("蘑菇推荐您降低车速至${max}千米每小时, 当前车速${current}千米每小时") + } + AIAssist.getInstance(it).speakTTSVoice(speakText.toString()) + } + } + CallerHmiManager.showGreenWave(min, max, computeCrossCountBetween(Triple(location.longitude, location.latitude, location.heading), kotlin.Pair(destX, destY))) + } finally { + receive() + } + } + } + } true } @@ -446,6 +461,21 @@ internal object V2NIdentifyDrawer: IEventDismissListener { } } + private fun computeCrossCountBetween(start: kotlin.Triple, end: kotlin.Pair): Int { + val points = V2NUtils.generateIntermediatePoints(kotlin.Pair(start.first, start.second), end, 10.0 * 1e-7) + var crossId = MapDataWrapper.getCrossRoad(start.first, start.second, start.third)?.cross_id_end + val angle = start.third + var count = 1 + for (p in points) { + val crossRoad = MapDataWrapper.getCrossRoad(p.first, p.second, angle) + if (crossRoad != null && !TextUtils.isEmpty(crossRoad.cross_id) && !TextUtils.equals(crossId, crossRoad.cross_id)) { + count++ + crossId = crossRoad.cross_id + } + } + return count + } + private fun getAlertContent(poiType: String, distance: Double): String { return when (poiType) { EventTypeEnumNew.TYPE_SOCKET_ROAD_SHIGONG.poiType -> { @@ -531,29 +561,43 @@ internal object V2NIdentifyDrawer: IEventDismissListener { } private fun drawOtherRetrogradeVehicle(event: MessagePad.Event) { - Log.d("V2NIdentifyDrawer", "---drawOtherRetrogradeVehicle --- :${event.toString()}, [${FunctionBuildConfig.v2nMainSwitch}, ${FunctionBuildConfig.isNewV2NData}]") + Logger.i("V2NIdentifyDrawer", "---drawOtherRetrogradeVehicle --- :${event.toString()}, [${FunctionBuildConfig.v2nMainSwitch}, ${FunctionBuildConfig.isNewV2NData}]") if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) { handler.removeMessages(MSG_WHAT_DRAW_OTHER_RETROGRADE_VEHICLE) handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_OTHER_RETROGRADE_VEHICLE, event)) } } + private fun drawGreenWave(crossSpeed: V2nCrossSpeed) { + Log.d("V2NIdentifyDrawer", "---drawGreenWave---: $crossSpeed, [${FunctionBuildConfig.v2nMainSwitch}, ${FunctionBuildConfig.isNewV2NData}]") + if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) { + handler.removeMessages(MSG_WHAT_DRAW_GREEN_WAVE) + handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_GREEN_WAVE, crossSpeed)) + } + } + private val nioEventListener = object : IMoGoV2nNioEventListener { override fun onV2nNioCongestionEvent(congestion: MessagePad.V2nCongestion) { super.onV2nNioCongestionEvent(congestion) + V2XBizTrace.onAck(congestion, "onV2nNioCongestionEvent", true) } override fun onV2nNioCrossoverEvent(event: MessagePad.Event) { super.onV2nNioCrossoverEvent(event) + V2XBizTrace.onAck(event,"onV2nNioCrossoverEvent", true) + //TODO renwj } - override fun onV2nNioGreenWavePassageEvent(crossSpeed: MessagePad.V2nCrossSpeed) { + override fun onV2nNioGreenWavePassageEvent(crossSpeed: V2nCrossSpeed) { super.onV2nNioGreenWavePassageEvent(crossSpeed) + V2XBizTrace.onAck(crossSpeed, "onV2nNioGreenWavePassageEvent", true) + drawGreenWave(crossSpeed) } override fun onV2nNioOtherRetrogradeEvent(event: MessagePad.Event) { super.onV2nNioOtherRetrogradeEvent(event) - Logger.i(TAG, "onV2nNioOtherRetrogradeEvent --> ${event.toString()}") + CallerLogger.i(TAG, "onV2nNioOtherRetrogradeEvent --> ${event}") + V2XBizTrace.onAck(event, "onV2nNioOtherRetrogradeEvent", true) drawOtherRetrogradeVehicle(event) } } diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/utils/V2NUtils.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/utils/V2NUtils.kt index e233531b36..2e52ad28ec 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/utils/V2NUtils.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/utils/V2NUtils.kt @@ -7,8 +7,11 @@ import com.mogo.map.entities.Lane import com.zhidaoauto.map.data.road.CenterLine import org.locationtech.jts.geom.Coordinate import org.locationtech.jts.geom.GeometryFactory +import org.locationtech.jts.geom.LineString +import org.locationtech.jts.linearref.LengthIndexedLine import java.util.concurrent.CountDownLatch + object V2NUtils { private const val TAG = "V2NUtils" @@ -42,4 +45,25 @@ object V2NUtils { } data class Decision(val laneId: Int? = null,val total: List, val occupy: List) + + + fun generateIntermediatePoints(head: Pair, tail: Pair, interval: Double): List> { + val geometryFactory = GeometryFactory() + val start = Coordinate(head.first, head.second) + val end = Coordinate(tail.first, tail.second) + val line: LineString = geometryFactory.createLineString(arrayOf(start, end)) + val indexedLine = LengthIndexedLine(line) + val lineLength = indexedLine.endIndex + val result: MutableList = ArrayList() + var i = 0.0 + while (i <= lineLength) { + val p = indexedLine.extractPoint(i) + result.add(p) + i += interval + } + if (result[result.size - 1].distance(end) > 0.0001) { + result.add(end) + } + return result.map { Pair(it.x, it.y) } + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/v2x/TrafficLightDispatcher.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/v2x/TrafficLightDispatcher.kt index faeca9e548..e33751bd52 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/v2x/TrafficLightDispatcher.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/v2x/TrafficLightDispatcher.kt @@ -105,6 +105,12 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight "${SceneConstant.M_D_C}${TAG}", "onAutopilotPerceptionTrafficLight ---- hasObuLightStatus = $hasObuLightStatus ----hasAiLightStatus = $hasAiLightStatus , trafficLights : ${trafficLights?:"null"}" ) + Log.i(TAG,"source="+trafficLights?.source) + if(trafficLights?.source == 2){ + hasObuLightStatus = false + hasAiLightStatus = false + hasFusionLightStatus = true + } if (!hasObuLightStatus) { if (!hasAiLightStatus) { trafficLights?.let { @@ -130,6 +136,7 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight if (!hasAutopilotPerception) { hasAutopilotPerception = true } + if(light.nextState == null || light.nextState == FusionTrafficLightOuterClass.FusionLightState.STATE_OFF_FUSION || light.nextTwoState == null || light.nextTwoState == FusionTrafficLightOuterClass.FusionLightState.STATE_OFF_FUSION){ if (HmiBuildConfig.isShowCarSourceTrafficLightView) { @@ -147,17 +154,25 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight onTrafficLightPlusSource(convert(light.state), 0, DataSourceType.TELEMATIC) } }else{ - //有下一和下二灯态,则为融合V2N红绿灯数据 - onFusionTrafficLight(convert(light.state),light.duration.toInt(), - convert(light.nextState),light.nextDuration.toInt(), - convert(light.nextTwoState),light.nextTwoDuration.toInt(), - DataSourceType.TELEMATIC_UNION_V2N - ) - //当前灯态倒计时小于5S时,展示额外的提示框 - if(light.duration < 5){ - onTrafficLightPrompt(convert(light.state),light.duration.toInt()) + Log.i(TAG,"current state="+light.state+" current duration="+light.duration+ + " nextState="+light.nextState+" nextDuration="+light.nextDuration+ + " nextTwoState="+light.nextTwoState+" nextTwoDuration="+light.nextTwoDuration) + if(convert(light.state) == TrafficLightEnum.BLACK){ + //隐藏当前红绿灯以及额外提示框 + CallerTrafficLightListenerManager.disableTrafficLight() + }else{ + //有下一和下二灯态,则为融合V2N红绿灯数据 + onFusionTrafficLight(convert(light.state),light.duration.toInt(), + convert(light.nextState),light.nextDuration.toInt(), + convert(light.nextTwoState),light.nextTwoDuration.toInt(), + DataSourceType.TELEMATIC_UNION_V2N + ) + //当前灯态倒计时小于5S时,展示额外的提示框 + if(light.duration < 5){ + onTrafficLightPrompt(convert(light.state),light.duration,convert(light.nextState),light.nextDuration, + convert(light.nextTwoState),light.nextTwoDuration) + } } - //TODO 提示框的消失逻辑 } } } @@ -277,10 +292,11 @@ class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener, IMoGoTrafficLight linkCode = ChainConstant.CHAIN_SOURCE_ADAS, nodeAliasCode = ChainConstant.CHAIN_CODE_ADAS_TRAFFIC_LIGHT, paramIndexes = [0, 1]) - override fun onTrafficLightPrompt(currentState: TrafficLightEnum, currentDuration: Int) { - super.onTrafficLightPrompt(currentState, currentDuration) - Log.i("xuxinchao","融合V2N红绿灯额外提示框提醒 Dis") - CallerTrafficLightListenerManager.onShowTrafficLightPrompt(currentState, currentDuration) + override fun onTrafficLightPrompt(currentState: TrafficLightEnum, currentDuration: Float, + nextState: TrafficLightEnum, nextDuration: Float, + nextTwoState: TrafficLightEnum, nextTwoDuration: Float) { + super.onTrafficLightPrompt(currentState, currentDuration,nextState, nextDuration, nextTwoState, nextTwoDuration) + CallerTrafficLightListenerManager.onShowTrafficLightPrompt(currentState, currentDuration,nextState, nextDuration, nextTwoState, nextTwoDuration) } /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt index cda2a7f5bf..6a9985c591 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiProvider.kt @@ -4,6 +4,7 @@ import android.content.Context import android.text.TextUtils import android.view.Gravity import android.view.ViewGroup +import android.view.WindowManager import androidx.lifecycle.ProcessLifecycleOwner import androidx.lifecycle.lifecycleScope import com.alibaba.android.arouter.facade.annotation.Route @@ -30,6 +31,7 @@ import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager import com.mogo.eagle.core.function.call.v2x.CallerTurnLightListenerManager import com.mogo.eagle.core.function.hmi.ui.camera.RoadVideoDialog +import com.mogo.eagle.core.function.hmi.ui.greenwave.GreenWaveView import com.mogo.eagle.core.function.hmi.ui.lookaround.M1LookAroundView import com.mogo.eagle.core.function.hmi.ui.notice.DispatchDialogManager import com.mogo.eagle.core.function.hmi.ui.notice.NoticeCheckDialog @@ -83,6 +85,8 @@ class MoGoHmiProvider : IMoGoHmiProvider { private val xiaozhi by lazy { XiaoZhiStateManager() } + private val greenWave by lazy { AtomicReference() } + override fun init(context: Context?) { this.context = context @@ -403,4 +407,29 @@ class MoGoHmiProvider : IMoGoHmiProvider { override fun notifyXiaoZhiStatusChanged(event: Event, state: State) { xiaozhi.notify(event, state) } + + override fun showGreenWave(min: Int, max: Int, cross: Int) { + val activity = AppStateManager.currentActivity() ?: return + greenWave.get()?.hide() + val content = GreenWaveView(activity) + MoGoPopWindow.Builder() + .contentView(content) + .width(WindowManager.LayoutParams.WRAP_CONTENT) + .height(WindowManager.LayoutParams.WRAP_CONTENT) + .attachToActivity(activity) + .gravityInActivity(Gravity.END) + .onDismissed { + greenWave.set(null) + } + .onShowed { + content.bind(min, max, cross) + } + .build().also { + greenWave.set(it) + }.show() + } + + override fun dismissGreenWave() { + greenWave.get()?.hide() + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/greenwave/GreenWaveView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/greenwave/GreenWaveView.kt new file mode 100644 index 0000000000..77d3c1dd99 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/greenwave/GreenWaveView.kt @@ -0,0 +1,160 @@ +package com.mogo.eagle.core.function.hmi.ui.greenwave + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.MotionEvent +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener +import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.kotlin.scope +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.rv.divider.CommonDividerItemDecoration +import com.mogo.eagle.core.utilcode.util.SizeUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import kotlinx.coroutines.Runnable +import kotlinx.coroutines.launch +import kotlin.math.abs +import kotlinx.android.synthetic.main.view_green_wave_passenger_layout.view.speed as passenger_speed +import kotlinx.android.synthetic.main.view_green_wave_driver_layout.view.speed as driver_speed +import kotlinx.android.synthetic.main.view_green_wave_passenger_layout.view.wave_rv as passenger_wave_rv +import kotlinx.android.synthetic.main.view_green_wave_driver_layout.view.wave_rv as driver_wave_rv +import kotlinx.android.synthetic.main.view_green_wave_passenger_layout.view.recommend_speed as passenger_recommend_speed +import kotlinx.android.synthetic.main.view_green_wave_driver_layout.view.recommend_speed as driver_recommend_speed +import kotlinx.android.synthetic.main.view_green_wave_passenger_layout.view.recommend_cross as passenger_recommend_cross +import kotlinx.android.synthetic.main.view_green_wave_driver_layout.view.recommend_cross as driver_recommend_cross + +class GreenWaveView: LinearLayout, IMoGoChassisLocationGCJ02Listener, RecyclerView.OnItemTouchListener, Runnable { + + companion object { + private const val TAG = "GreenWaveView" + } + + private var lastSpeed: Int = Int.MIN_VALUE + + constructor(context: Context) : this(context, null) + constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0) + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + LayoutInflater.from(context).inflate(if (isDriver) R.layout.view_green_wave_driver_layout else R.layout.view_green_wave_passenger_layout, this) + background = if (isDriver) ContextCompat.getDrawable(context, R.drawable.bg_green_wave_driver) else ContextCompat.getDrawable(context, R.drawable.bg_green_wave_passenger) + } + + private val isDriver by lazy { + AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) + } + + private class WaveHolder(item: ImageView): RecyclerView.ViewHolder(item) + + private class WaveAdapter: RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WaveHolder { + val item = ImageView(parent.context) + item.layoutParams = RecyclerView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT) + return WaveHolder(item) + } + + override fun getItemCount(): Int { + return 5000 + } + + override fun onBindViewHolder(holder: WaveHolder, position: Int) { + val item = holder.itemView as? ImageView ?: return + val reminder = position % 3 + when(reminder) { + 0 -> { + item.background = ContextCompat.getDrawable(item.context, R.drawable.icon_green_wave_alpha_low) + } + 1 -> { + item.background = ContextCompat.getDrawable(item.context, R.drawable.icon_green_wave_alpha_mid) + } + else -> { + item.background = ContextCompat.getDrawable(item.context, R.drawable.icon_green_wave_alpha_high) + } + } + } + } + + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 5, this) + val rv: RecyclerView? = if (isDriver) driver_wave_rv else passenger_wave_rv + rv?.addItemDecoration(CommonDividerItemDecoration.Builder() + .spanCountTBCare(false) + .horizontalInnerSpace(SizeUtils.dp2px(10f)) + .build()) + rv?.addOnItemTouchListener(this) + rv?.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, true) + rv?.adapter = WaveAdapter() + startAutoScroll() + } + + private fun startAutoScroll() { + removeCallbacks(this) + post(this) + } + + private fun stopAutoScroll() { + removeCallbacks(this) + } + + override fun run() { + val rv: RecyclerView? = if (isDriver) driver_wave_rv else passenger_wave_rv + rv?.scrollBy(-3, 0) + postDelayed(this, 20) + } + + override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean { + return true + } + + override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) { } + + override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) { } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + CallerChassisLocationGCJ02ListenerManager.removeListener(TAG) + val rv: RecyclerView? = if (isDriver) driver_wave_rv else passenger_wave_rv + rv?.removeOnItemTouchListener(this) + stopAutoScroll() + } + + override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { + var isChanged = false + val speed = (abs(mogoLocation?.gnssSpeed ?: 0f) * 3.6f).toInt() + if (lastSpeed != speed) { + isChanged = true + lastSpeed = speed + } + if (isChanged) { + UiThreadHandler.post { + if (isDriver) { + driver_speed?.text = speed.toString() + } else { + passenger_speed?.text = speed.toString() + } + } + } + } + + fun bind(minSpeed: Int, maxSpeed: Int, cross: Int) { + scope.launch { + if (isDriver) { + driver_recommend_speed?.text = "建议车速${minSpeed}-${maxSpeed}km/h" + driver_recommend_cross?.text = "可丝滑通过${cross}个路口" + } else { + passenger_recommend_speed?.text = "建议车速${minSpeed}-${maxSpeed}km/h" + passenger_recommend_cross?.text = "可丝滑通过${cross}个路口" + } + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/exploration/AutomaticExplorationView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/exploration/AutomaticExplorationView.kt index 3ee10b2cda..bba7a7f340 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/exploration/AutomaticExplorationView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/exploration/AutomaticExplorationView.kt @@ -11,6 +11,7 @@ import android.widget.ImageView import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.data.autopilot.AutopilotSummaryInfo import com.mogo.eagle.core.data.notice.AutoExplorationEntity import com.mogo.eagle.core.function.hmi.R @@ -86,6 +87,18 @@ class AutomaticExplorationView @JvmOverloads constructor( dataList.add(AutoExplorationEntity("前方路口行人/非机动车分析",6000L)) dataList.add(AutoExplorationEntity("路侧视频分析",8000L)) automaticExplorationAdapter?.setData(dataList) + + //每出现一次自动探查,增加相应的服务次数 + //车辆服务次数 + AutopilotSummaryInfo.vehicleServiceNum += 31 + //道路信息提醒次数 + AutopilotSummaryInfo.infoTipNum += 9 + //车辆行为提醒次数 + AutopilotSummaryInfo.vehicleTipNum += 13 + //弱势参与者提醒次数 + AutopilotSummaryInfo.vulnerableTipNum += 4 + //消除安全风险隐患次数 + AutopilotSummaryInfo.dangerNum += 24 } override fun onDetachedFromWindow() { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/traffic/TrafficLightPromptView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/traffic/TrafficLightPromptView.kt index 11d1277f4c..2e9696dc27 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/traffic/TrafficLightPromptView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/traffic/TrafficLightPromptView.kt @@ -13,6 +13,7 @@ import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.ui.widget.TypefaceTextView import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler /** * 融合红绿灯变灯提示 @@ -33,7 +34,6 @@ class TrafficLightPromptView @JvmOverloads constructor( private var tvPromptContent: TextView ?= null private var tvTrafficNum: TypefaceTextView ?= null private var tvTrafficNumDecimal: TypefaceTextView ?= null - private val randomList = ArrayList() init { val typedArray = context.obtainStyledAttributes(attrs, R.styleable.TrafficLightPromptView) @@ -53,16 +53,6 @@ class TrafficLightPromptView @JvmOverloads constructor( tvTrafficNum = findViewById(R.id.tvTrafficNum) tvTrafficNumDecimal = findViewById(R.id.tvTrafficNumDecimal) CallerTrafficLightListenerManager.addListener(TAG, this) - - randomList.add(0.99f) - randomList.add(0.72f) - randomList.add(0.44f) - randomList.add(0.21f) - randomList.add(0.06f) - -// tvPromptContent?.text = "请准备出发" -// tvTrafficNum?.text = "12" -// tvTrafficNumDecimal?.text = ".56" } override fun onDetachedFromWindow() { @@ -70,6 +60,12 @@ class TrafficLightPromptView @JvmOverloads constructor( CallerTrafficLightListenerManager.removeListener(TAG) } + override fun disableTrafficLight() { + super.disableTrafficLight() + UiThreadHandler.post{ + this@TrafficLightPromptView.visibility = GONE + } + } /** @@ -77,8 +73,10 @@ class TrafficLightPromptView @JvmOverloads constructor( * @param currentState 当前灯态 * @param currentDuration 当前灯态倒计时 */ - override fun onShowTrafficLightPrompt(currentState: TrafficLightEnum, currentDuration: Int) { - super.onShowTrafficLightPrompt(currentState, currentDuration) + override fun onShowTrafficLightPrompt(currentState: TrafficLightEnum, currentDuration: Float, + nextState: TrafficLightEnum, nextDuration: Float, + nextTwoState: TrafficLightEnum, nextTwoDuration: Float) { + super.onShowTrafficLightPrompt(currentState, currentDuration,nextState, nextDuration, nextTwoState, nextTwoDuration) ThreadUtils.runOnUiThread { when(currentState){ TrafficLightEnum.GREEN->{ @@ -115,7 +113,49 @@ class TrafficLightPromptView @JvmOverloads constructor( this@TrafficLightPromptView.visibility = View.GONE } } - tvTrafficNum?.text = currentDuration.toString() + if(currentDuration>0 && currentDuration<5){ + tvTrafficNum?.text = "${currentDuration.toInt()}." + tvTrafficNumDecimal?.text = (currentDuration*100 - currentDuration.toInt()*100).toInt().toString() + }else{ + tvTrafficNum?.text = "0." + tvTrafficNumDecimal?.text = "0" + this@TrafficLightPromptView.visibility = View.GONE + } + when(nextState){ + TrafficLightEnum.GREEN->{ + if(user == 0){ + //司机端提示 + tvPromptTitle?.text = "即将绿灯" + tvPromptContent?.text = "请准备出发" + }else{ + //乘客端提示 + tvPromptContent?.text = "即将绿灯,请准备出发" + } + } + TrafficLightEnum.RED->{ + if(user == 0){ + //司机端提示 + tvPromptTitle?.text = "即将红灯" + tvPromptContent?.text = "请减速慢行" + }else{ + //乘客端提示 + tvPromptContent?.text = "即将红灯,请减速慢行" + } + } + TrafficLightEnum.YELLOW->{ + if(user == 0){ + //司机端提示 + tvPromptTitle?.text = "即将黄灯" + tvPromptContent?.text = "请减速慢行" + }else{ + //乘客端提示 + tvPromptContent?.text = "即将红灯,请减速慢行" + } + } + TrafficLightEnum.BLACK->{ + this@TrafficLightPromptView.visibility = View.GONE + } + } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/FusionTrafficLightView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/FusionTrafficLightView.kt index 08dc7f67c6..77a32e388a 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/FusionTrafficLightView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/FusionTrafficLightView.kt @@ -2,9 +2,9 @@ package com.mogo.eagle.core.function.hmi.ui.widget import android.content.Context import android.util.AttributeSet -import android.util.Log import android.view.LayoutInflater import android.view.View +import android.widget.ImageView import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import com.mogo.eagle.core.data.enums.DataSourceType @@ -12,14 +12,8 @@ import com.mogo.eagle.core.data.enums.TrafficLightEnum import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler -import kotlinx.android.synthetic.main.hmi_view_fusion_traffic_light.view.fusionTrafficLightBg -import kotlinx.android.synthetic.main.hmi_view_fusion_traffic_light.view.fusionTrafficLightNum -import kotlinx.android.synthetic.main.hmi_view_fusion_traffic_light.view.fusionTrafficLightPointer -import kotlinx.android.synthetic.main.hmi_view_fusion_traffic_light.view.fusionTrafficLightProportion -import kotlinx.android.synthetic.main.hmi_view_fusion_traffic_light.view.fusionTrafficLightScale -import kotlinx.android.synthetic.main.hmi_view_fusion_traffic_light.view.fusionTrafficLightState - /** * 融合红绿灯View * 鹰眼6.5.0版本需求 @@ -41,6 +35,12 @@ class FusionTrafficLightView @JvmOverloads constructor( private var maxYellowDuration = 0 //黄灯最长时间 private var maxRedDuration = 0 //红灯最长时间 + private var fusionTrafficLightNum: TypefaceTextView ?=null //融合红绿灯倒计时 + private var fusionTrafficLightState: ImageView ?= null //融合红绿灯灯态 + private var fusionTrafficLightScale: ImageView ?= null //融合红绿灯刻度 + private var fusionTrafficLightPointer: ImageView ?= null //融合红绿灯指针 + private var fusionTrafficLightProportion: ProportionChartView ?= null //占比进度条 + init { val typedArray = context.obtainStyledAttributes(attrs, R.styleable.FusionTrafficLightView) @@ -50,13 +50,17 @@ class FusionTrafficLightView @JvmOverloads constructor( override fun onAttachedToWindow() { super.onAttachedToWindow() - LayoutInflater.from(context).inflate(R.layout.hmi_view_fusion_traffic_light, this, true) - CallerTrafficLightListenerManager.addListener(TAG, this) if(user == 0){ - fusionTrafficLightBg.setBackgroundResource(R.drawable.bg_fusion_traffic_light) + LayoutInflater.from(context).inflate(R.layout.hmi_view_fusion_traffic_light, this, true) }else{ - fusionTrafficLightBg.setBackgroundResource(R.drawable.bg_fusion_traffic_light_p) + LayoutInflater.from(context).inflate(R.layout.hmi_view_fusion_traffic_light_p, this, true) } + CallerTrafficLightListenerManager.addListener(TAG, this) + fusionTrafficLightNum = findViewById(R.id.fusionTrafficLightNum) + fusionTrafficLightState = findViewById(R.id.fusionTrafficLightState) + fusionTrafficLightScale = findViewById(R.id.fusionTrafficLightScale) + fusionTrafficLightPointer = findViewById(R.id.fusionTrafficLightPointer) + fusionTrafficLightProportion = findViewById(R.id.fusionTrafficLightProportion) } override fun onDetachedFromWindow() { @@ -69,7 +73,6 @@ class FusionTrafficLightView @JvmOverloads constructor( */ override fun disableTrafficLight() { super.disableTrafficLight() - Log.i("xuxinchao","disableTrafficLight 关闭红绿灯预警展示") UiThreadHandler.post{ mCurrentLightId = TrafficLightEnum.BLACK this@FusionTrafficLightView.visibility = GONE @@ -94,116 +97,128 @@ class FusionTrafficLightView @JvmOverloads constructor( ) { super.showFusionTrafficLight(currentState, currentDuration, nextState, nextDuration, nextTwoState, nextTwoDuration, lightSource) - //如果当前红绿灯视图为隐藏状态则设置为显示状态 - if(this@FusionTrafficLightView.visibility == View.GONE){ - this@FusionTrafficLightView.visibility = View.VISIBLE - //首次展示,需要将当前、下一、下二灯态的时间占比绘制出来,只绘制一次 - val proportionList = ArrayList() - //按照绿、黄、红的顺序将灯态时间添加到数组 - when (currentState) { + ThreadUtils.runOnUiThread { + //如果当前红绿灯视图为隐藏状态则设置为显示状态 + if(this@FusionTrafficLightView.visibility == View.GONE){ + this@FusionTrafficLightView.visibility = View.VISIBLE + //首次展示,需要将当前、下一、下二灯态的时间占比绘制出来,只绘制一次 + val proportionList = ArrayList(3) + proportionList.add(0) + proportionList.add(0) + proportionList.add(0) + //按照绿、黄、红的顺序将灯态时间添加到数组 + when (currentState) { + TrafficLightEnum.GREEN -> { + proportionList.add(0,currentDuration) + maxGreenDuration = currentDuration + } + TrafficLightEnum.YELLOW -> { + proportionList.add(1,currentDuration) + maxYellowDuration = if(currentDuration < 3){ + 3 + }else{ + currentDuration + } + } + else -> { + proportionList.add(2,currentDuration) + maxRedDuration = currentDuration + } + } + when(nextState){ + TrafficLightEnum.GREEN -> { + proportionList.add(0,nextDuration) + maxGreenDuration = nextDuration + } + TrafficLightEnum.YELLOW -> { + proportionList.add(1,nextDuration) + maxYellowDuration = if(nextDuration<3){ + 3 + }else{ + nextDuration + } + } + else -> { + proportionList.add(2,nextDuration) + maxRedDuration = nextDuration + } + } + when(nextTwoState){ + TrafficLightEnum.GREEN -> { + proportionList.add(0,nextTwoDuration) + maxGreenDuration = nextTwoDuration + } + TrafficLightEnum.YELLOW -> { + proportionList.add(1,nextTwoDuration) + maxYellowDuration = if(nextTwoDuration<3){ + 3 + }else{ + nextTwoDuration + } + } + else -> { + proportionList.add(2,nextTwoDuration) + maxRedDuration = nextTwoDuration + } + } + fusionTrafficLightProportion?.updateProportion(proportionList) + totalDuration = maxGreenDuration + maxYellowDuration + maxRedDuration + } + //根据当前灯态设置转盘、刻度、指针背景 + when(currentState){ TrafficLightEnum.GREEN -> { - proportionList.add(0,currentDuration) - maxGreenDuration = currentDuration + fusionTrafficLightState?.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_green)) + fusionTrafficLightScale?.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_green_scale)) + fusionTrafficLightPointer?.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_green_pointer)) } TrafficLightEnum.YELLOW -> { - proportionList.add(1,currentDuration) - maxYellowDuration = currentDuration + fusionTrafficLightState?.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_yellow)) + fusionTrafficLightScale?.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_yellow_scale)) + fusionTrafficLightPointer?.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_yellow_pointer)) } else -> { - proportionList.add(2,currentDuration) - maxRedDuration = currentDuration + fusionTrafficLightState?.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_red)) + fusionTrafficLightScale?.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_red_scale)) + fusionTrafficLightPointer?.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_red_pointer)) } } - when(nextState){ + //更新当前灯态倒计时时间 + if(currentDuration>0){ + fusionTrafficLightNum?.text = currentDuration.toString() + }else{ + fusionTrafficLightNum?.text = "0" + } + //当时间为1开头时时间视觉上看不是左右居中对齐,需要做便宜操作 + if(currentDuration.toString().startsWith("1")){ + val numLayoutParams = fusionTrafficLightNum?.layoutParams as LayoutParams + numLayoutParams.rightMargin = 6 + fusionTrafficLightNum?.layoutParams = numLayoutParams + }else{ + val numLayoutParams = fusionTrafficLightNum?.layoutParams as LayoutParams + numLayoutParams.rightMargin = 0 + fusionTrafficLightNum?.layoutParams = numLayoutParams + } + + //更新指针指向 + val pointerLayoutParams = fusionTrafficLightPointer?.layoutParams as LayoutParams + val currentAngle = when (currentState) { TrafficLightEnum.GREEN -> { - proportionList.add(0,nextDuration) - maxGreenDuration = nextDuration + 360f*(maxGreenDuration-currentDuration)/totalDuration } + TrafficLightEnum.YELLOW -> { - proportionList.add(1,nextDuration) - maxYellowDuration = nextDuration + 360f*(maxGreenDuration+maxYellowDuration-currentDuration)/totalDuration } + else -> { - proportionList.add(2,nextDuration) - maxRedDuration = nextDuration + 360f*(maxGreenDuration+maxYellowDuration+maxRedDuration-currentDuration)/totalDuration } } - when(nextTwoState){ - TrafficLightEnum.GREEN -> { - proportionList.add(0,nextTwoDuration) - maxGreenDuration = nextTwoDuration - } - TrafficLightEnum.YELLOW -> { - proportionList.add(1,nextTwoDuration) - maxYellowDuration = nextTwoDuration - } - else -> { - proportionList.add(2,nextTwoDuration) - maxRedDuration = nextTwoDuration - } - } - fusionTrafficLightProportion.updateProportion(proportionList) - totalDuration = maxGreenDuration + maxYellowDuration + maxRedDuration - Log.i("xuxinchao","totalDuration="+totalDuration) - Log.i("xuxinchao","maxGreenDuration="+maxGreenDuration) - Log.i("xuxinchao","maxYellowDuration="+maxYellowDuration) - Log.i("xuxinchao","maxRedDuration="+maxRedDuration) - } - //根据当前灯态设置转盘、刻度、指针背景 - when(currentState){ - TrafficLightEnum.GREEN -> { - fusionTrafficLightState.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_green)) - fusionTrafficLightScale.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_green_scale)) - fusionTrafficLightPointer.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_green_pointer)) - } - TrafficLightEnum.YELLOW -> { - fusionTrafficLightState.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_yellow)) - fusionTrafficLightScale.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_yellow_scale)) - fusionTrafficLightPointer.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_yellow_pointer)) - } - else -> { - fusionTrafficLightState.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_red)) - fusionTrafficLightScale.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_red_scale)) - fusionTrafficLightPointer.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.icon_light_red_pointer)) - } - } - //更新当前灯态倒计时时间 - if(currentDuration>0){ - fusionTrafficLightNum.text = currentDuration.toString() - }else{ - fusionTrafficLightNum.text = "0" - } - //当时间为1开头时时间视觉上看不是左右居中对齐,需要做便宜操作 - if(currentDuration.toString().startsWith("1")){ - val numLayoutParams = fusionTrafficLightNum.layoutParams as LayoutParams - numLayoutParams.rightMargin = 10 - fusionTrafficLightNum.layoutParams = numLayoutParams - }else{ - val numLayoutParams = fusionTrafficLightNum.layoutParams as LayoutParams - numLayoutParams.rightMargin = 0 - fusionTrafficLightNum.layoutParams = numLayoutParams + pointerLayoutParams.circleAngle = currentAngle + fusionTrafficLightPointer?.rotation = currentAngle + fusionTrafficLightPointer?.layoutParams = pointerLayoutParams } - //更新指针指向 - val pointerLayoutParams = fusionTrafficLightPointer.layoutParams as LayoutParams - var currentAngle = 0f - currentAngle = when (currentState) { - TrafficLightEnum.GREEN -> { - 360f*(maxGreenDuration-currentDuration)/totalDuration - } - - TrafficLightEnum.YELLOW -> { - 360f*(maxGreenDuration+maxYellowDuration-currentDuration)/totalDuration - } - - else -> { - 360f*(maxGreenDuration+maxYellowDuration+maxRedDuration-currentDuration)/totalDuration - } - } - pointerLayoutParams.circleAngle = currentAngle - fusionTrafficLightPointer.rotation = currentAngle - fusionTrafficLightPointer.layoutParams = pointerLayoutParams - - } +} } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ItinerarySummaryDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ItinerarySummaryDialog.kt index 35f66a7159..ebade2c614 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ItinerarySummaryDialog.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ItinerarySummaryDialog.kt @@ -56,6 +56,14 @@ class ItinerarySummaryDialog(context: Context, isDriver: Boolean, theme: Int) : //关闭Dialog按钮 ivSummaryClose = findViewById(R.id.ivSummaryClose) ivSummaryClose?.setOnClickListener { + //对本次服务记录清零 + AutopilotSummaryInfo.intersectionServicesNum = 0 + AutopilotSummaryInfo.lightServicesNum = 0 + AutopilotSummaryInfo.infoTipNum = 0 + AutopilotSummaryInfo.vehicleTipNum = 0 + AutopilotSummaryInfo.vulnerableTipNum = 0 + AutopilotSummaryInfo.dangerNum = 0 + //关闭弹窗 dismiss() } //小智总结 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ProportionChartView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ProportionChartView.java index 56c67650ad..71facc3ca9 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ProportionChartView.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ProportionChartView.java @@ -9,7 +9,6 @@ import android.graphics.Paint; import android.graphics.RectF; import android.graphics.SweepGradient; import android.util.AttributeSet; -import android.util.Log; import android.view.View; import androidx.annotation.Nullable; import com.mogo.eagle.core.function.hmi.R; @@ -132,7 +131,6 @@ public class ProportionChartView extends View { @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - Log.i("xuxinchao","onDraw canvas"); drawRingView(canvas); } @@ -140,7 +138,6 @@ public class ProportionChartView extends View { * 画Ring */ private void drawRingView(Canvas canvas){ - Log.i("xuxinchao","drawRingView 画Ring"); float sweepAngle = 0f; float startAngle = -90f; //矩形坐标 @@ -176,7 +173,7 @@ public class ProportionChartView extends View { } mRingPaint.setShader(sweepGradient); //画圆环 - canvas.drawArc(mRectF, startAngle, sweepAngle - 2, false, mRingPaint); + canvas.drawArc(mRectF, startAngle, sweepAngle, false, mRingPaint); } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/RomaTaxiView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/RomaTaxiView.kt index 83cc0f180e..eb250f8406 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/RomaTaxiView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/RomaTaxiView.kt @@ -79,12 +79,11 @@ class RomaTaxiView @JvmOverloads constructor( } override fun romaViewStatus(status: Boolean) { - Log.i("emArrow","romaViewStatus:$status") ThreadUtils.runOnUiThread { if(status){ this.visibility = View.VISIBLE } else { -// this.visibility = View.GONE + this.visibility = View.GONE } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/WifiStateView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/WifiStateView.kt index d50e7a398b..dadcbd9113 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/WifiStateView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/WifiStateView.kt @@ -90,7 +90,7 @@ class WifiStateView @JvmOverloads constructor( wifiHandler = WifiHandler(this) val wifiInfo = wifiManager!!.connectionInfo wifiName = wifiInfo.ssid.replace("\"","") - Log.i("emArrow", "init wifiName: $wifiName") +// Log.i("emArrow", "init wifiName: $wifiName") } private val wifiStateReceiver: BroadcastReceiver = object : BroadcastReceiver() { @@ -105,7 +105,7 @@ class WifiStateView @JvmOverloads constructor( } val wifiInfo = wifiManager!!.connectionInfo wifiName = wifiInfo.ssid.replace("\"","") - Log.i("emArrow", "wifiName: $wifiName") +// Log.i("emArrow", "wifiName: $wifiName") level = WifiManager.calculateSignalLevel(wifiInfo.rssi, 5) wifiHandler?.sendEmptyMessage(level) } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_green_wave_alpha_high.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_green_wave_alpha_high.png new file mode 100644 index 0000000000..01d57b1544 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_green_wave_alpha_high.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_green_wave_alpha_low.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_green_wave_alpha_low.png new file mode 100644 index 0000000000..206e9cb0f0 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_green_wave_alpha_low.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_green_wave_alpha_mid.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_green_wave_alpha_mid.png new file mode 100644 index 0000000000..c783b5da7f Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_green_wave_alpha_mid.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_green_wave_driver.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_green_wave_driver.xml new file mode 100644 index 0000000000..90ed9a6e67 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_green_wave_driver.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_green_wave_passenger.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_green_wave_passenger.xml new file mode 100644 index 0000000000..3bea23da6e --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_green_wave_passenger.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_white_circle_driver.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_white_circle_driver.xml new file mode 100644 index 0000000000..8b6f3a410f --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_white_circle_driver.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_white_circle_passenger.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_white_circle_passenger.xml new file mode 100644 index 0000000000..84d954e2d9 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_white_circle_passenger.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/hmi_view_fusion_traffic_light.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/hmi_view_fusion_traffic_light.xml index 170c3e95e1..ec37040a26 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/hmi_view_fusion_traffic_light.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/hmi_view_fusion_traffic_light.xml @@ -3,9 +3,9 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/fusionTrafficLightBg" - android:layout_width="@dimen/dp_250" - android:layout_height="@dimen/dp_250" - android:background="@drawable/bg_fusion_traffic_light_p" + android:layout_width="@dimen/dp_200" + android:layout_height="@dimen/dp_200" + android:background="@drawable/bg_fusion_traffic_light" > + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_green_wave_driver_layout.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_green_wave_driver_layout.xml new file mode 100644 index 0000000000..e1a921c747 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_green_wave_driver_layout.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_green_wave_passenger_layout.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_green_wave_passenger_layout.xml new file mode 100644 index 0000000000..c4d12ad34f --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_green_wave_passenger_layout.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_traffic_light_prompt.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_traffic_light_prompt.xml index 610468aafb..ddf9505f38 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_traffic_light_prompt.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_traffic_light_prompt.xml @@ -15,7 +15,6 @@ android:layout_marginLeft="@dimen/dp_150" android:textSize="@dimen/sp_30" android:textColor="@color/white" - android:text="即将绿灯" /> @@ -47,10 +44,11 @@ android:id="@+id/tvTrafficNum" android:layout_width="wrap_content" android:layout_height="wrap_content" - app:layout_constraintBottom_toBottomOf="@id/tvTrafficNumDecimal" + app:layout_constraintTop_toTopOf="parent" app:layout_constraintRight_toLeftOf="@id/tvTrafficNumDecimal" + android:layout_marginTop="@dimen/dp_26" + android:layout_marginRight="@dimen/dp_2" android:textSize="@dimen/sp_90" - android:text="3" android:textColor="@color/light_prompt_red" app:textType="DS_DIGIB_2" /> diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_traffic_light_prompt_p.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_traffic_light_prompt_p.xml index 87dfef8b33..b7414081e7 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_traffic_light_prompt_p.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_traffic_light_prompt_p.xml @@ -13,33 +13,31 @@ app:layout_constraintLeft_toLeftOf="parent" android:textSize="@dimen/sp_32" android:textColor="@color/light_prompt_content" - android:layout_marginTop="@dimen/dp_50" - android:layout_marginStart="@dimen/dp_50" - android:text="即将红灯,请减速慢行" + android:layout_marginTop="@dimen/dp_55" + android:layout_marginStart="@dimen/dp_70" /> \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/MapBizProvider.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/MapBizProvider.kt index 82e91d04b0..5e4209959f 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/MapBizProvider.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/MapBizProvider.kt @@ -37,8 +37,8 @@ class MapBizProvider :IMoGoFunctionServerProvider, IMogoRoma { CallerVisualAngleManager.init() } - override fun trigger(romaStatus: Boolean) { - romaManager.trigger(romaStatus) + override fun trigger(roamStatus: Boolean) { + romaManager.trigger(roamStatus) } override fun onDestroy() { diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/AiCloudIdentifyDataManager.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/AiCloudIdentifyDataManager.kt index eabf93ed0d..6ab2eaa78c 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/AiCloudIdentifyDataManager.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/AiCloudIdentifyDataManager.kt @@ -32,21 +32,15 @@ class AiCloudIdentifyDataManager { }) } - fun trigger(romaStatus: Boolean, startDis: Int, endDis: Int) { - requestRangeOfIdentify(romaStatus, startDis, endDis) + fun trigger(romaStatus: Boolean, startDis: Int, endDis: Int, lat: Double, lon: Double) { + requestRangeOfIdentify(romaStatus, startDis, endDis, lat, lon) } fun requestRangeOfIdentify( - romaStatus: Boolean, - startDis: Int, - endDis: Int + romaStatus: Boolean, startDis: Int, endDis: Int, lat: Double, lon: Double ) { - val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().gnssInfo aiCloudIdentifyNetWorkModel.requestIdentifyRange( - romaStatus, - startDis, endDis, - loc.longitude, - loc.latitude, + romaStatus, startDis, endDis, lon, lat, { CallerMapAiCloudDataManager.invokeResponse(romaStatus) }, diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/RomaManager.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/RomaManager.kt index dab363741b..cd7c06de66 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/RomaManager.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/ai/RomaManager.kt @@ -3,6 +3,7 @@ package com.mogo.eagle.core.function.business.ai import android.os.Handler import android.os.Looper import android.os.Message +import android.util.Log import com.mogo.commons.debug.DebugConfig import com.mogo.commons.module.status.MogoStatusManager import com.mogo.eagle.core.data.config.FunctionBuildConfig @@ -51,7 +52,7 @@ class RomaManager() : IMoGoPlanningRottingListener, IMoGoAutopilotStatusListener, IMoGoRomaListener, IMoGoAiCloudIdentifyDataListener { companion object { - private const val TAG = "AiCloudIdentifyData" + private const val TAG = "RomaManager" private const val H_ERROR_CLOUD = 1 private const val H_ERROR_MAP = 2 @@ -116,13 +117,17 @@ class RomaManager() : IMoGoPlanningRottingListener, true } - fun trigger(romaStatus: Boolean) { - if (CallerMapIdentifyManager.roma.first != TAG && CallerMapIdentifyManager.roma.second) { + fun trigger(roamStatus: Boolean) { + if (CallerMapIdentifyManager.roam.first.isNotEmpty() + && CallerMapIdentifyManager.roam.first!= TAG + && CallerMapIdentifyManager.roam.second) { ToastUtils.showLong("正在展示路口漫游,请稍后重试") + Log.e("emArrow", "正在展示路口漫游,请稍后重试") + CallerMapRomaListener.invokeMapRoma(false) return } // 乘客司机屏屏各自单独控制漫游 - if (romaStatus) { + if (roamStatus) { // 开启roma,当前非漫游,开启 MapRomaTrace.log( "", @@ -140,7 +145,7 @@ class RomaManager() : IMoGoPlanningRottingListener, } private fun openRoma() { - CallerMapIdentifyManager.roma = Pair(TAG, true) + CallerMapIdentifyManager.roam = Pair(TAG, true) CallerMapUIServiceManager.getMapUIController()?.visualAngleLock(true) CallerMapUIServiceManager.getMapUIController()?.setScrollGesturesEnable(false) updateLongSightLevel(true) @@ -149,7 +154,7 @@ class RomaManager() : IMoGoPlanningRottingListener, @Synchronized private fun closeRoma(manual: Boolean = true) { - CallerMapIdentifyManager.roma = Pair("", false) + CallerMapIdentifyManager.roam = Pair("", false) CallerMapUIServiceManager.getMapUIController()?.visualAngleLock(false) CallerMapUIServiceManager.getMapUIController()?.setScrollGesturesEnable(true) updateLongSightLevel(false) @@ -192,7 +197,7 @@ class RomaManager() : IMoGoPlanningRottingListener, "cityCode" to CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().cityCode ), !dataReceive ) - aiCloudIdentifyDataManager.trigger(dataReceive, START_METRE, END_METRE) + aiCloudIdentifyDataManager.trigger(dataReceive, START_METRE, END_METRE,loc.latitude,loc.longitude) } override fun response(requestStatus: Boolean, errorMsg: String?) { diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/MapRoamView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/MapRoamView.kt index 421a11f096..ed02b78cab 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/MapRoamView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/MapRoamView.kt @@ -8,13 +8,12 @@ import android.util.Log import androidx.lifecycle.LifecycleObserver import com.mogo.eagle.core.function.api.map.road.IMoGoMapRoadListener import com.mogo.eagle.core.function.api.map.roma.IMoGoAiCloudIdentifyDataListener -import com.mogo.eagle.core.function.business.ai.AiCloudIdentifyDataManager import com.mogo.eagle.core.function.business.ai.AiCloudIdentifyDataManager.Companion.aiCloudIdentifyDataManager -import com.mogo.eagle.core.function.business.ai.RomaManager import com.mogo.eagle.core.function.business.identify.MapIdentifySubscriber import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager import com.mogo.eagle.core.function.call.map.CallerMapAiCloudDataManager import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager +import com.mogo.eagle.core.utilcode.util.CoordinateUtils import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider import com.mogo.map.MogoMap.Companion.MAP_ROAM import com.mogo.map.MogoMapView @@ -24,23 +23,19 @@ import mogo.yycp.api.proto.SocketDownData class MapRoamView(context: Context?, attrs: AttributeSet?) : MogoMapView(context, attrs), - LifecycleObserver, IMoGoMapRoadListener , IMoGoAiCloudIdentifyDataListener { + LifecycleObserver, IMoGoMapRoadListener, IMoGoAiCloudIdentifyDataListener { companion object { private const val TAG = "MapRoamView" } - override fun onCreate(bundle: Bundle?) { - super.onCreate(bundle) - } - override fun onAttachedToWindow() { super.onAttachedToWindow() initMapView() } private fun initMapView() { - map?.uiController?.showMyLocation(false) + getUI()?.showMyLocation(false) map?.uiSettings?.let { it.setAllGesturesEnabled(false) //设置指南针是否可见。 @@ -58,18 +53,6 @@ class MapRoamView(context: Context?, attrs: AttributeSet?) : MogoMapView(context return MAP_ROAM } - override fun onSaveInstanceState(outState: Bundle) { - super.onSaveInstanceState(outState) - } - - override fun onResume() { - super.onResume() - } - - override fun onPause() { - super.onPause() - } - private fun getUI(): IMogoMapUIController? { return map?.uiController } @@ -83,25 +66,28 @@ class MapRoamView(context: Context?, attrs: AttributeSet?) : MogoMapView(context fun openRoam() { this.onResume() - CallerMapAiCloudDataManager.addListener(TAG, this) + getUI()?.setVisible(true) + CallerMapAiCloudDataManager.addListener(RoadCrossRoamView.TAG, this) // 更新地图视角 - 高视角 getUI()?.changeMapVisualAngle(VisualAngleMode.MAP_STYLE_VR_ANGLE_TOP, null) // 更新路口位置 val latLng = CallerMapRoadListenerManager.getStopLineLatLng() - Log.i("emArrow","$TAG 开始漫游 latLng:${latLng.toString()}") latLng?.let { val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() + val curLat = loc.latitude + val curLng = loc.longitude loc.latitude = latLng.first loc.longitude = latLng.second setExtraGPSData(loc) + val dis = CoordinateUtils.calculateLineDistance(curLat, curLng, latLng.first, latLng.second) + Log.i("emArrow", "$TAG 开始漫游 latLng:$latLng , curLat:$curLat , curLng:$curLng , dis:$dis") + // 开始漫游 + aiCloudIdentifyDataManager.trigger(true, 1, 300, latLng.first, latLng.second) } - // 开始漫游 - aiCloudIdentifyDataManager.trigger(true, 1, 300) } - override fun response(requestStatus: Boolean, errorMsg: String?) { - + Log.e("emArrow","road map response:$requestStatus , errorMsg:${errorMsg?:""}") } override fun onAiIdentifyData(obj: SocketDownData.SocketDownDataProto?) { @@ -116,17 +102,16 @@ class MapRoamView(context: Context?, attrs: AttributeSet?) : MogoMapView(context } } - fun closeRoam(){ - this.onPause() + fun closeRoam() { // 结束漫游 - aiCloudIdentifyDataManager.trigger(false, 1, 300) - CallerMapAiCloudDataManager.removeListener(TAG) + val latLng = CallerMapRoadListenerManager.getStopLineLatLng() + latLng?.let { + aiCloudIdentifyDataManager.trigger(false, 1, 300, it.first, it.second) + } + CallerMapAiCloudDataManager.removeListener(RoadCrossRoamView.TAG) MapIdentifySubscriber.instance.clearAiCloudRoma(MAP_ROAM) - } - - override fun onDestroy() { - // 先取消注册数据,再onDestroy - super.onDestroy() + this.onPause() + getUI()?.setVisible(false) } } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/RoadCrossRoamListAdapter.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/RoadCrossRoamListAdapter.kt index 97923c4251..bd08778a2b 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/RoadCrossRoamListAdapter.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/RoadCrossRoamListAdapter.kt @@ -1,7 +1,6 @@ package com.mogo.eagle.core.function.view import android.content.Context -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -48,7 +47,6 @@ class RoadCrossRoamListAdapter(private val mContext: Context, private val lightM val r0 = Random.nextInt(0,3) val r1 = Random.nextInt(1,9) - Log.i("emArrow","random:${r0 * 1000L + r1 * 100L}") // 模拟加载完成 holder.itemView.postDelayed({ holder.progressBar.visibility = View.GONE diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/RoadCrossRoamView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/RoadCrossRoamView.kt index a9996ffbe8..60ea614bb2 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/RoadCrossRoamView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/RoadCrossRoamView.kt @@ -36,7 +36,7 @@ class RoadCrossRoamView @JvmOverloads constructor( ) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoMapRoadListener{ companion object { - private const val TAG = "RoadCrossRoamView" + const val TAG = "RoadCrossRoamView" } private var showState by Delegates.observable(false) { _, oldV, newV -> @@ -91,19 +91,23 @@ class RoadCrossRoamView @JvmOverloads constructor( override fun onStopLineInfo(info: StopLine) { super.onStopLineInfo(info) + if(info.distance == 0.0){ + Log.i("emArrow", "showState return , distance is zero") + return + } showState = info.distance < 200 && info.distance > 100 - Log.i("emArrow", "showState $showState , distance:${info.distance}") +// Log.i("emArrow", "showState $showState , distance:${info.distance}") } private fun attachView() { // 处于漫游模式下不做处理 - if (CallerMapIdentifyManager.roma.second) { - if (CallerMapIdentifyManager.roma.first != TAG) { + if (CallerMapIdentifyManager.roam.second) { + if (CallerMapIdentifyManager.roam.first != TAG) { ToastUtils.showLong("正在漫游中,不展示路口漫游") } return } - CallerMapIdentifyManager.roma = Pair(TAG, true) + CallerMapIdentifyManager.roam = Pair(TAG, true) this.visibility = View.VISIBLE ivZhiRoadRoamView.visibility = View.VISIBLE mapRoamView.visibility = View.VISIBLE @@ -145,7 +149,7 @@ class RoadCrossRoamView @JvmOverloads constructor( } mapRoamView.closeRoam() mapRoamView.visibility = View.GONE - CallerMapIdentifyManager.roma = Pair("", false) + CallerMapIdentifyManager.roam = Pair("", false) lvRoadCrossRoamTip.adapter = null animator?.cancel() if (lightMode) { diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotSummaryInfo.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotSummaryInfo.kt index 693723af34..d4bedfe80b 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotSummaryInfo.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotSummaryInfo.kt @@ -5,6 +5,13 @@ package com.mogo.eagle.core.data.autopilot */ object AutopilotSummaryInfo { + /** + * 车辆服务次数 + */ + @JvmField + @Volatile + var vehicleServiceNum = 0 + /** * 全息路口服务次数 */ diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumNew.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumNew.kt index a6d812c06a..ecd8c64586 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumNew.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/EventTypeEnumNew.kt @@ -1,5 +1,6 @@ package com.mogo.eagle.core.data.enums +import android.view.View import com.mogo.eagle.core.data.R import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils @@ -518,6 +519,13 @@ enum class EventTypeEnumNew( content = "前方%s米有车辆异常倒车/逆行,蘑菇提醒您注意观察小心通过", tts = "前方%s米有车辆异常倒车/逆行,蘑菇提醒您注意观察小心通过" ), + TYPE_SOCKET_ROAD_GREE_WAVE( + "100063", + "绿波通行", + poiTypeSrcVr = View.NO_ID, + content = "保持当前车速即可通过路口,好丝滑!", + tts = "保持当前车速即可通过路口,好丝滑!" + ), TYPE_ERROR( 0.toString(), "未知/错误/异常", diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/datacenter/union/IMoGoTrafficLightListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/datacenter/union/IMoGoTrafficLightListener.kt index 2278328f24..4c0fec1918 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/datacenter/union/IMoGoTrafficLightListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/datacenter/union/IMoGoTrafficLightListener.kt @@ -33,7 +33,9 @@ interface IMoGoTrafficLightListener { /** * 红绿灯额外提示框 */ - fun onTrafficLightPrompt(currentState: TrafficLightEnum,currentDuration: Int){} + fun onTrafficLightPrompt(currentState: TrafficLightEnum, currentDuration: Float, + nextState: TrafficLightEnum, nextDuration: Float, + nextTwoState: TrafficLightEnum, nextTwoDuration: Float){} /** * 融合红绿灯,带有下一灯态和下二灯态 @@ -67,7 +69,9 @@ interface IMoGoTrafficLightListener { * @param currentState 当前灯态 * @param currentDuration 当前灯态倒计时 */ - fun onShowTrafficLightPrompt(currentState: TrafficLightEnum,currentDuration: Int){} + fun onShowTrafficLightPrompt(currentState: TrafficLightEnum, currentDuration: Float, + nextState: TrafficLightEnum, nextDuration: Float, + nextTwoState: TrafficLightEnum, nextTwoDuration: Float){} /** * 展示融合带有下一下二灯态的红绿灯 diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt index fc5e2a7874..54840daaa6 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoHmiProvider.kt @@ -217,4 +217,14 @@ interface IMoGoHmiProvider :IProvider{ * 通知小智形象要变化了 */ fun notifyXiaoZhiStatusChanged(event: Event, state: State) + + /** + * 展示绿波通行弹窗 + */ + fun showGreenWave(min: Int, max: Int, cross: Int) + + /** + * 隐藏绿波通弹窗 + */ + fun dismissGreenWave() } \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/roma/IMogoRoma.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/roma/IMogoRoma.kt index 5d402c9656..c74be6b4ea 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/roma/IMogoRoma.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/roma/IMogoRoma.kt @@ -6,8 +6,8 @@ interface IMogoRoma : IProvider { /** * 触发开启/关闭漫游 - * @param romaStatus 漫游状态 + * @param roamStatus 漫游状态 */ - fun trigger(romaStatus:Boolean) + fun trigger(roamStatus:Boolean) } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt index 7270a55fda..9e2d5a04af 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt @@ -317,4 +317,18 @@ object CallerHmiManager { fun notifyXiaoZhiStatusChanged(event: Event, state: State) { hmiProviderApi?.notifyXiaoZhiStatusChanged(event, state) } + + /** + * 展示绿波通行弹窗 + */ + fun showGreenWave(min: Int, max: Int, cross: Int) { + hmiProviderApi?.showGreenWave(min, max, cross) + } + + /** + * 隐藏绿波通行弹窗 + */ + fun dismissGreenWave() { + hmiProviderApi?.dismissGreenWave() + } } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapAiCloudDataManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapAiCloudDataManager.kt index 4b635ff0a1..bf94597ef0 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapAiCloudDataManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapAiCloudDataManager.kt @@ -1,5 +1,6 @@ package com.mogo.eagle.core.function.call.map +import android.util.Log import com.mogo.eagle.core.function.api.map.roma.IMoGoAiCloudIdentifyDataListener import com.mogo.eagle.core.function.call.base.CallerBase import mogo.yycp.api.proto.SocketDownData @@ -7,14 +8,15 @@ import mogo.yycp.api.proto.SocketDownData object CallerMapAiCloudDataManager : CallerBase() { fun invokeResponse(requestStatus: Boolean, errorMsg: String? = null) { - val tag = CallerMapIdentifyManager.roma.first + val tag = CallerMapIdentifyManager.roam.first + Log.i("emArrow","invokeResponse tag:$tag , status:$requestStatus , errorMsg:${errorMsg?:""}") if(tag.isNotEmpty() && M_LISTENERS.containsKey(tag)){ M_LISTENERS[tag]?.response(requestStatus, errorMsg) } } fun invokeAiIdentifyData(obj: SocketDownData.SocketDownDataProto?){ - val tag = CallerMapIdentifyManager.roma.first + val tag = CallerMapIdentifyManager.roam.first if(tag.isNotEmpty() && M_LISTENERS.containsKey(tag)){ M_LISTENERS[tag]?.onAiIdentifyData(obj) } diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapIdentifyManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapIdentifyManager.kt index b8eae0633d..7d7faa2940 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapIdentifyManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapIdentifyManager.kt @@ -3,19 +3,21 @@ package com.mogo.eagle.core.function.call.map import com.alibaba.android.arouter.launcher.ARouter import com.mogo.eagle.core.data.constants.MogoServicePaths import com.mogo.eagle.core.function.api.map.roma.IMogoRoma -import com.mogo.eagle.core.utilcode.util.ToastUtils object CallerMapIdentifyManager { @Volatile - var roma = Pair("", false) + var roam = Pair("", false) + set(value) { + field = value + } - private val romaApi: IMogoRoma + private val roamApi: IMogoRoma get() = ARouter.getInstance().build(MogoServicePaths.PATH_MAP_BIZ) .navigation() as IMogoRoma - fun romaTrigger(romaStatus: Boolean) { - romaApi.trigger(romaStatus) + fun romaTrigger(roamStatus: Boolean) { + roamApi.trigger(roamStatus) } } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/msgbox/CallerMsgBoxManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/msgbox/CallerMsgBoxManager.kt index 2124075422..0ee40a2d7e 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/msgbox/CallerMsgBoxManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/msgbox/CallerMsgBoxManager.kt @@ -26,14 +26,14 @@ object CallerMsgBoxManager { */ fun saveMsgBox(bean: MsgBoxBean) { CallerTrace.write(TAG,bean) - providerApi?.saveMsg(bean) //todo emArrow test + providerApi?.saveMsg(bean) } /** * 存储含有pb的数据到消息盒子(区别与上述方法中的trace write) */ fun saveMsgBoxHasPB(bean: MsgBoxBean){ - providerApi?.saveMsg(bean) //todo emArrow test + providerApi?.saveMsg(bean) } /** diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/v2x/CallerTrafficLightListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/v2x/CallerTrafficLightListenerManager.kt index 40d3cc465f..fa5c3cb131 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/v2x/CallerTrafficLightListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/v2x/CallerTrafficLightListenerManager.kt @@ -77,10 +77,12 @@ object CallerTrafficLightListenerManager : CallerBase * @param currentState 当前灯态 * @param currentDuration 当前灯态倒计时 */ - fun onShowTrafficLightPrompt(currentState: TrafficLightEnum,currentDuration: Int){ + fun onShowTrafficLightPrompt(currentState: TrafficLightEnum, currentDuration: Float, + nextState: TrafficLightEnum, nextDuration: Float, + nextTwoState: TrafficLightEnum, nextTwoDuration: Float){ M_LISTENERS.forEach{ val listener = it.value - listener.onShowTrafficLightPrompt(currentState,currentDuration) + listener.onShowTrafficLightPrompt(currentState,currentDuration,nextState, nextDuration, nextTwoState, nextTwoDuration) } } diff --git a/core/mogo-core-res/src/main/res/values/dimens.xml b/core/mogo-core-res/src/main/res/values/dimens.xml index 2bfd230ee7..47d642104f 100644 --- a/core/mogo-core-res/src/main/res/values/dimens.xml +++ b/core/mogo-core-res/src/main/res/values/dimens.xml @@ -1079,6 +1079,7 @@ 48dp 52dp 55dp + 69dp 72dp 76dp 90dp diff --git a/libraries/mapmodule/src/main/java/com/autonavi/nge/map/MapView.kt b/libraries/mapmodule/src/main/java/com/autonavi/nge/map/MapView.kt index 6245dd8cee..0937ddb890 100644 --- a/libraries/mapmodule/src/main/java/com/autonavi/nge/map/MapView.kt +++ b/libraries/mapmodule/src/main/java/com/autonavi/nge/map/MapView.kt @@ -181,9 +181,6 @@ class MapView(context: Context, private val mMapStyleParams: IMapStyleParams, pr } } - - - override fun getMapEngine(): MapEngine { return mMapEngine } @@ -229,7 +226,7 @@ class MapView(context: Context, private val mMapStyleParams: IMapStyleParams, pr mITraffic = null } - //surfaceview截屏 + // surfaceView截屏 private fun createBitmapFromGLSurface(x: Int, y: Int, w: Int, h: Int, gl: GL10): Bitmap? { val bitmapBuffer = IntArray(w * h) val bitmapSource = IntArray(w * h) @@ -256,10 +253,6 @@ class MapView(context: Context, private val mMapStyleParams: IMapStyleParams, pr return Bitmap.createBitmap(bitmapSource, w, h, Bitmap.Config.ARGB_8888) } - - - - fun setMapController(mMapController: IMapController?) { this.mMapController = mMapController } @@ -1231,7 +1224,6 @@ class MapView(context: Context, private val mMapStyleParams: IMapStyleParams, pr //设置刷新帧率 override fun setRenderFps(fps: Int) { m_FPS = fps - } //设置刷新帧率 diff --git a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/view/MapAutoViewHelper.kt b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/view/MapAutoViewHelper.kt index 4c1e81750a..7b8e117fc6 100644 --- a/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/view/MapAutoViewHelper.kt +++ b/libraries/mapmodule/src/main/java/com/zhidaoauto/map/sdk/open/view/MapAutoViewHelper.kt @@ -1,6 +1,7 @@ package com.zhidaoauto.map.sdk.open.view import android.util.Log +import android.view.View import com.autonavi.nge.map.LonLat import com.zhidaoauto.map.data.point.LonLatPoint import com.zhidaoauto.map.sdk.inner.CompileConfig @@ -775,6 +776,10 @@ class MapAutoViewHelper(mapAutoView: MapAutoView) { ?.setPanel(PanelManager.PANEL_WHAT_HID, PanelManager.PANEL_BTN_LOGO) } + fun setVisible(visible:Boolean){ + mMapAutoView.getClerk()?.add() + mMapAutoView.getMapView()?.visibility = if (visible) View.VISIBLE else View.GONE + } /** * 地图截屏 diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoData.kt b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoData.kt index 3e73cc5ec2..0a5de66661 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoData.kt +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoData.kt @@ -2,6 +2,7 @@ package com.mogo.map import com.mogo.eagle.core.data.map.MogoLocation import com.mogo.map.entities.BusStation +import com.mogo.map.entities.CrossRoad import com.mogo.map.entities.Lane import com.mogo.map.entities.RoadInfo import com.zhidaoauto.map.data.point.LonLatPoint @@ -121,4 +122,9 @@ interface IMogoData { * 获取公交站点集合 */ fun getBusStation(routeList: ArrayList): List -} \ No newline at end of file + + /** + * 获取路口数据 + */ + fun getCrossRoad(lon: Double, lat: Double, angle: Double): CrossRoad? +} diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/entities/CrossRoad.kt b/libraries/mogo-map-api/src/main/java/com/mogo/map/entities/CrossRoad.kt new file mode 100644 index 0000000000..61d44ce785 --- /dev/null +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/entities/CrossRoad.kt @@ -0,0 +1,9 @@ +package com.mogo.map.entities + +data class CrossRoad( + val status: Int, // 0: 不在路口 1: 在路口 + val tile_id: String, // 起始路口瓦片id或者当前路口的瓦片id + val cross_id: String, // 起始路口id或当前路口id + val tile_id_end: String, // + val cross_id_end: String +) diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.kt b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.kt index e8a92d550c..da8852a7c0 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.kt +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.kt @@ -327,4 +327,6 @@ interface IMogoMapUIController { */ fun getMapScreenShot() fun setWeatherEnable(enable: Boolean) + + fun setVisible(visible:Boolean) } \ No newline at end of file diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.kt b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.kt index 78b3717fd5..05c66acba8 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.kt +++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.kt @@ -951,4 +951,8 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle override fun setWeatherEnable(enable: Boolean) { mMapView.getMapAutoViewHelper()?.setWeatherEnable(enable) } + + override fun setVisible(visible: Boolean) { + mMapView.getMapAutoViewHelper()?.setVisible(visible) + } } \ No newline at end of file diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MapDataWrapper.kt b/libraries/mogo-map/src/main/java/com/mogo/map/MapDataWrapper.kt index c6bd7e2ac9..e319ec8514 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MapDataWrapper.kt +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MapDataWrapper.kt @@ -6,11 +6,13 @@ import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP import com.mogo.map.MogoData.Companion.mogoMapData import com.mogo.map.entities.BusStation +import com.mogo.map.entities.CrossRoad import com.mogo.map.entities.Lane import com.mogo.map.location.GDLocationClient.Companion.gdLocationClient import com.mogo.map.utils.HDMapUtils.getHDCityCode import com.zhidaoauto.map.data.point.LonLatPoint import com.zhidaoauto.map.data.road.CenterLine +import com.zhidaoauto.map.data.road.RoadCross import com.zhidaoauto.map.data.road.RoadNameInfo import com.zhidaoauto.map.data.road.RoadRectInfos import com.zhidaoauto.map.data.road.RoutePath @@ -21,6 +23,7 @@ import com.zhidaoauto.map.sdk.open.abs.OnHdDataDownByCityListener import com.zhidaoauto.map.sdk.open.data.CityInfo import com.zhidaoauto.map.sdk.open.data.MapDataApi import java.util.concurrent.CountDownLatch +import java.util.concurrent.atomic.AtomicReference /** * 地图数据工具,涉及到数据调用可能会有耗时,建议IO操作 @@ -303,4 +306,18 @@ object MapDataWrapper : IMogoData { latch.await() return resultList } + + override fun getCrossRoad(lon: Double, lat: Double, angle: Double): CrossRoad? { + val latch = CountDownLatch(1) + val temp = AtomicReference() + MapDataApi.getCrossRoad(lon, lat, angle.toFloat(), object : IResult { + + override fun result(code: Int, result: RoadCross?) { + temp.set(CrossRoad(result?.status ?: 0, result?.tile_id ?: "", result?.cross_id ?: "", result?.tile_id_end ?: "", result?.cross_id_end ?: "")) + latch.countDown() + } + }) + latch.await() + return temp.get() + } } \ No newline at end of file diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/identify/MogoIdentifyManager.java b/libraries/mogo-map/src/main/java/com/mogo/map/identify/MogoIdentifyManager.java index 1ed3d51575..0f7d84edf4 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/identify/MogoIdentifyManager.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/identify/MogoIdentifyManager.java @@ -33,7 +33,7 @@ public class MogoIdentifyManager implements IMogoIdentifyManager { @Override public void removeMarker(String uuidString, String mapInstance) { try { - IMogoMap iMogoMap = MogoMap.Companion.getMapInstance().getMogoMap(MogoMap.DEFAULT); + IMogoMap iMogoMap = MogoMap.Companion.getMapInstance().getMogoMap(mapInstance); if(iMogoMap != null){ iMogoMap.removeMarker(uuidString); } @@ -48,7 +48,7 @@ public class MogoIdentifyManager implements IMogoIdentifyManager { @Override public void updateBatchMarkerPosition(HashMap optionsArrayList, String mapInstance) { try { - IMogoMap iMogoMap = MogoMap.Companion.getMapInstance().getMogoMap(MogoMap.DEFAULT); + IMogoMap iMogoMap = MogoMap.Companion.getMapInstance().getMogoMap(mapInstance); if(iMogoMap != null){ iMogoMap.updateBatchMarkerPosition(optionsArrayList); } @@ -60,7 +60,7 @@ public class MogoIdentifyManager implements IMogoIdentifyManager { @Override public void updateBatchAiMarkerPosition(HashMap optionsArrayList, String mapInstance) { try { - IMogoMap iMogoMap = MogoMap.Companion.getMapInstance().getMogoMap(MogoMap.DEFAULT); + IMogoMap iMogoMap = MogoMap.Companion.getMapInstance().getMogoMap(mapInstance); if(iMogoMap != null){ iMogoMap.updateBatchAiMarkerPosition(optionsArrayList); }