[6.7.0][调试面板] 添加自车视角调整入口

This commit is contained in:
renwj
2024-10-21 15:23:26 +08:00
parent e0060e3b30
commit 868936b0d6
10 changed files with 324 additions and 2 deletions

View File

@@ -31,10 +31,12 @@ import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
import com.mogo.eagle.core.function.api.hmi.xiaozhi.event.Event
import com.mogo.eagle.core.function.api.hmi.xiaozhi.listener.OnXiaoZhiStateChangeListener
import com.mogo.eagle.core.function.api.hmi.xiaozhi.state.State
import com.mogo.eagle.core.function.api.map.angle.Scene
import com.mogo.eagle.core.function.api.och.toolkit.IToolKitItemClickListener
import com.mogo.eagle.core.function.api.och.toolkit.ToolKitCustomItemAddParam
import com.mogo.eagle.core.function.api.och.toolkit.ToolKitDefaultItemAddParam
import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager
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.R
@@ -53,6 +55,7 @@ import com.mogo.eagle.core.function.hmi.ui.tools.ModifyBindingCarDialog
import com.mogo.eagle.core.function.hmi.ui.tools.ToBindingCarDialog
import com.mogo.eagle.core.function.hmi.ui.tools.UpgradeAppDialog
import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog
import com.mogo.eagle.core.function.hmi.ui.widget.HDMapVisualAngleAdjustLayout
import com.mogo.eagle.core.function.hmi.ui.widget.StatusBarView
import com.mogo.eagle.core.function.hmi.xiaozhi.XiaoZhiStateManager
import com.mogo.eagle.core.utilcode.floating.MoGoPopWindow
@@ -67,6 +70,7 @@ import com.zhjt.service_biz.BizConfig
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import me.jessyan.autosize.utils.AutoSizeUtils
import java.lang.ref.WeakReference
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicReference
@@ -97,6 +101,11 @@ class MoGoHmiProvider : IMoGoHmiProvider {
private val operatePanel by lazy { AtomicReference<WeakReference<View>>() }
/**
* 视角调整弹窗引用
*/
private val popOfVisualAngleAdjust by lazy { AtomicReference<WeakReference<MoGoPopWindow>>() }
override fun init(context: Context?) {
this.context = context
}
@@ -541,4 +550,39 @@ class MoGoHmiProvider : IMoGoHmiProvider {
override fun removeToolkitByTag(toolTagList: List<String>) {
ToolKitDataManager.invokeRemoveToolkitByTag(toolTagList)
}
override fun toggleHdMapVisualAngleAdjust(show: Boolean) {
val activity = AppStateManager.currentActivity() ?: return
val old = popOfVisualAngleAdjust.get()?.get()
if (show) {
if (old != null && old.isShowing()) {
return
}
val content = HDMapVisualAngleAdjustLayout(activity)
MoGoPopWindow.Builder()
.attachToActivity(activity)
.width(AutoSizeUtils.dp2px(activity, 600.0f))
.height(AutoSizeUtils.dp2px(activity, 400.0f))
.draggable(true)
.contentView(content)
.gravityInActivity(Gravity.CENTER)
.onTouchInterceptorInDrag { child, _ ->
return@onTouchInterceptorInDrag content.getClickedViews().find { it == child } != null
}
.onDismissed {
popOfVisualAngleAdjust.set(null)
}
.build()
.also {
popOfVisualAngleAdjust.set(WeakReference(it))
it.show()
}
} else {
old?.takeIf { it.isShowing() }?.also { it.hide() }
}
}
override fun isHdMapVisualAngleAdjustShow(): Boolean {
return popOfVisualAngleAdjust.get()?.get()?.isShowing() ?: false
}
}

View File

@@ -56,6 +56,7 @@ import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.data.multidisplay.TelematicConstant
import com.mogo.eagle.core.data.obu.MogoObuConst
import com.mogo.eagle.core.data.obu.ObuStatusInfo
import com.mogo.eagle.core.function.angle.scenes.Default
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener
@@ -86,8 +87,10 @@ import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsFuncConfigListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager
import com.mogo.eagle.core.function.call.obu.CallerObuApiManager
import com.mogo.eagle.core.function.call.obu.CallerObuConnectListenerManager
import com.mogo.eagle.core.function.call.obu.CallerObuInfoListenerManager
@@ -139,6 +142,7 @@ import kotlinx.android.synthetic.main.view_debug_setting.view.btnBrakeThreshold
import kotlinx.android.synthetic.main.view_debug_setting.view.btnConnectServerIp
import kotlinx.android.synthetic.main.view_debug_setting.view.btnDisconnectIpc
import kotlinx.android.synthetic.main.view_debug_setting.view.btnDrawFusion
import kotlinx.android.synthetic.main.view_debug_setting.view.btnHdVisualAdjust
import kotlinx.android.synthetic.main.view_debug_setting.view.btnIpcReboot
import kotlinx.android.synthetic.main.view_debug_setting.view.btnPointCloudColor
import kotlinx.android.synthetic.main.view_debug_setting.view.btnPointCloudSize
@@ -1309,6 +1313,16 @@ internal class DebugSettingView @JvmOverloads constructor(
}
//设置工控机连接状态
setAutopilotConnectStatus()
// 设置视角调整
btnHdVisualAdjust?.isChecked = CallerHmiManager.isHdMapVisualAngleAdjustShow()
btnHdVisualAdjust?.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
CallerVisualAngleManager.changeScene(Default())
}
CallerHmiManager.toggleHdMapVisualAngleAdjust(isChecked)
}
}
/**

View File

@@ -0,0 +1,99 @@
package com.mogo.eagle.core.function.hmi.ui.widget
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.widget.RelativeLayout
import android.widget.SeekBar
import androidx.core.content.ContextCompat
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.kotlin.safeCancel
import com.mogo.eagle.core.utilcode.kotlin.scope
import kotlinx.android.synthetic.main.layout_hdmap_visual_angle_adjust.view.close
import kotlinx.android.synthetic.main.layout_hdmap_visual_angle_adjust.view.seekbar_testView_angle
import kotlinx.android.synthetic.main.layout_hdmap_visual_angle_adjust.view.seekbar_testView_cameraZ
import kotlinx.android.synthetic.main.layout_hdmap_visual_angle_adjust.view.seekbar_testView_zoom
import kotlinx.android.synthetic.main.layout_hdmap_visual_angle_adjust.view.textView_testView_angle
import kotlinx.android.synthetic.main.layout_hdmap_visual_angle_adjust.view.textView_testView_cameraZ
import kotlinx.android.synthetic.main.layout_hdmap_visual_angle_adjust.view.textView_testView_zoom
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
class HDMapVisualAngleAdjustLayout: RelativeLayout {
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
private var job: Job? = null
init {
LayoutInflater.from(context).inflate(R.layout.layout_hdmap_visual_angle_adjust, this, true)
setBackgroundColor(ContextCompat.getColor(context, R.color.white))
seekbar_testView_cameraZ.progress = 150
seekbar_testView_cameraZ.setOnSeekBarChangeListener(object :
SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar, i: Int, b: Boolean) {
val v = i.toFloat() / 10.0f
textView_testView_cameraZ.text = "cameraZ: $v/100.0"
toggleVisualAngleChange()
}
override fun onStartTrackingTouch(seekBar: SeekBar) {}
override fun onStopTrackingTouch(seekBar: SeekBar) {}
})
seekbar_testView_angle.progress = 125
seekbar_testView_angle.setOnSeekBarChangeListener(object :
SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar, i: Int, b: Boolean) {
val v = i.toFloat() / 10.0f
textView_testView_angle.text = "angle: $v/90"
toggleVisualAngleChange()
}
override fun onStartTrackingTouch(seekBar: SeekBar) {}
override fun onStopTrackingTouch(seekBar: SeekBar) {}
})
seekbar_testView_zoom.progress = 8
seekbar_testView_zoom.setOnSeekBarChangeListener(object :
SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar, i: Int, b: Boolean) {
val v = i.toFloat() / 10.0f
textView_testView_zoom.text = "zoom: $v/5"
toggleVisualAngleChange()
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
}
})
close?.onClick {
CallerHmiManager.toggleHdMapVisualAngleAdjust(false)
}
}
private fun toggleVisualAngleChange() {
job?.safeCancel()
scope.launch {
val eyeHeight: Float = seekbar_testView_cameraZ.progress / 10.0f
val zoom: Float = seekbar_testView_zoom.progress / 10.0f
val angle: Float = seekbar_testView_angle.progress / 10.0f
CallerMapUIServiceManager.getMapUIController()?.changeVisualAngle(eyeHeight, angle, zoom, -1)
}.also {
job = it
}
}
fun getClickedViews(): List<View?> {
return listOf(seekbar_testView_cameraZ, seekbar_testView_angle, seekbar_testView_zoom, close)
}
}

View File

@@ -0,0 +1,114 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:parentTag="android.widget.RelativeLayout"
tools:layout_width="@dimen/dp_400"
tools:layout_height="@dimen/dp_400">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_60"
android:orientation="vertical">
<!-- eyeheight-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:orientation="vertical"
android:background="@drawable/bg_mf_sop_operator"
android:layout_margin="@dimen/dp_10"
android:gravity="center"
android:layout_weight="1">
<SeekBar
android:id="@+id/seekbar_testView_cameraZ"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxHeight="2dp"
android:minHeight="2dp"
android:max="1000"
android:min="100"
android:paddingBottom="@dimen/dp_10"
android:paddingTop="@dimen/dp_10" />
<TextView
android:id="@+id/textView_testView_cameraZ"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:gravity="left"
android:padding="6dp"
android:text="cameraZ: 15/100"
android:textColor="#00BFFF"
android:textSize="20dp" />
</LinearLayout>
<!-- overlook-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:orientation="vertical"
android:background="@drawable/bg_mf_sop_operator"
android:layout_margin="@dimen/dp_10"
android:gravity="center"
android:layout_weight="1">
<SeekBar
android:id="@+id/seekbar_testView_angle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxHeight="2dp"
android:minHeight="2dp"
android:max="900"
android:min="100"
android:paddingBottom="@dimen/dp_10"
android:paddingTop="@dimen/dp_10" />
<TextView
android:id="@+id/textView_testView_angle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:gravity="left"
android:padding="6dp"
android:text="angle: 12.5/90"
android:textColor="#00BFFF"
android:textSize="20dp" />
</LinearLayout>
<!--zoom-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:orientation="vertical"
android:background="@drawable/bg_mf_sop_operator"
android:layout_margin="@dimen/dp_10"
android:gravity="center"
android:layout_weight="1">
<SeekBar
android:id="@+id/seekbar_testView_zoom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxHeight="2dp"
android:minHeight="2dp"
android:max="50"
android:min="1"
android:paddingBottom="@dimen/dp_10"
android:paddingTop="@dimen/dp_10" />
<TextView
android:id="@+id/textView_testView_zoom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:gravity="left"
android:padding="6dp"
android:text="zoom: 0.8/5"
android:textColor="#00BFFF"
android:textSize="20dp" />
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_10"
android:background="@drawable/icon_close_nor"/>
</merge>

View File

@@ -1874,7 +1874,6 @@
app:layout_constraintRight_toRightOf="@id/tbChangeAutoPilotStatus"
app:layout_constraintTop_toBottomOf="@id/tbChangeAutoPilotStatus"
/>
<Button
android:id="@+id/btnPointCloudSize"
android:layout_width="wrap_content"
@@ -1936,12 +1935,27 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/btnPointCloudColor" />
<ToggleButton
android:id="@+id/btnHdVisualAdjust"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:padding="@dimen/dp_20"
android:textColor="#000"
android:textOff="开启地图视角调整"
android:textOn="关闭地图视角调整"
android:textSize="@dimen/dp_24"
android:checked="false"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnPointCloudSize" />
<RadioGroup
android:id="@+id/rgGpsProvider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintTop_toBottomOf="@id/btnPointCloudColor">
app:layout_constraintTop_toBottomOf="@id/btnHdVisualAdjust">
<RadioButton
android:id="@+id/rbGpsProviderAndroid"

View File

@@ -19,6 +19,7 @@ import com.mogo.eagle.core.function.api.map.angle.ScreenToOriginDis.DOWN
import com.mogo.eagle.core.function.api.map.angle.ScreenToOriginDis.UP
import com.mogo.eagle.core.function.api.map.road.IMoGoMapRoadListener
import com.mogo.eagle.core.function.call.autopilot.*
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.call.map.*
import com.mogo.eagle.core.utilcode.kotlin.*
import com.zhidaoauto.map.data.road.RoadCross
@@ -150,6 +151,9 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
private var prevJob: Job? = null
override fun changeScene(scene: Scene) {
if (CallerHmiManager.isHdMapVisualAngleAdjustShow()) {
return
}
prevJob?.safeCancel()
scope.launch {
val delay = scene.getDelay()

View File

@@ -291,4 +291,15 @@ interface IMoGoHmiProvider :IProvider{
* 显示/隐藏 运营面板
*/
fun toggleOperatePanel(show: Boolean)
/**
* 是否弹出高精地图视角调整弹窗
*/
fun toggleHdMapVisualAngleAdjust(show: Boolean)
/**
* 视角弹窗是否已展示
*/
fun isHdMapVisualAngleAdjustShow(): Boolean
}

View File

@@ -432,4 +432,12 @@ object CallerHmiManager {
fun removeToolkitByTag(toolTagList: List<String>) {
hmiProviderApi?.removeToolkitByTag(toolTagList)
}
fun toggleHdMapVisualAngleAdjust(show: Boolean) {
hmiProviderApi?.toggleHdMapVisualAngleAdjust(show)
}
fun isHdMapVisualAngleAdjustShow(): Boolean {
return hmiProviderApi?.isHdMapVisualAngleAdjustShow() ?: false
}
}

View File

@@ -339,4 +339,9 @@ interface IMogoMapUIController {
* 设置自车相对屏幕位置
*/
fun setScreenToOriginDis(p: Float)
/**
* 调整自车视角
*/
fun changeVisualAngle(eyeHeight: Float, angle: Float, zoom: Float, duration: Int)
}

View File

@@ -29,6 +29,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.w
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.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
@@ -965,4 +966,12 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
override fun setScreenToOriginDis(p: Float) {
mMapView.getMapController()?.setScreenToOriginDis(p)
}
override fun changeVisualAngle(eyeHeight: Float, angle: Float, zoom: Float, duration: Int) {
Logger.d(TAG, "changeVisualAngle: eyeHeight: $eyeHeight, zoom: $zoom, angle: $angle, duration: $duration")
if (checkAMapView()) {
Logger.d(TAG, "changeVisualAngle -- 2 --")
mMapView.getMapController()?.interpolation(eyeHeight, angle, zoom, -1, duration)
}
}
}