[master] merge 6.7.4 conflict gradle version

This commit is contained in:
zhongchao
2024-11-11 14:27:10 +08:00
12 changed files with 196 additions and 60 deletions

View File

@@ -2,7 +2,6 @@ package com.mogo.eagle.core.function.business.roadcross
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.BitmapFactory
import android.os.Handler
import android.os.Looper
import android.os.Message
@@ -21,7 +20,9 @@ import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.map.R
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.mogo.logger.scene.SceneConstant.Companion.M_MAP
import com.mogo.eagle.core.utilcode.util.CoordinateUtils
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.map.overlay.core.Level
@@ -38,6 +39,8 @@ class RoadCrossCameraManager : IMoGoMapRoadListener, IGaoDeMapLocationListener {
private const val TAG = "RoadCrossCameraManager"
private const val REQUEST_CAMERA_MSG = 0
private const val REMOVE_MARKER_MSG = 1
private const val REQUEST_CAL_ROAD_DISTANCE = 2
private const val REQUEST_CAL_ROAD_DELAY_TIME = 1000L
private const val REQUEST_CAMERA_DELAY_TIME = 20000L
private const val REMOVE_MARKER_DELAY_TIME = 10000L
@@ -64,6 +67,11 @@ class RoadCrossCameraManager : IMoGoMapRoadListener, IGaoDeMapLocationListener {
getAllRoadCross()
}
REQUEST_CAL_ROAD_DISTANCE -> {
CallerLogger.d("$M_MAP$TAG", "cal roam road distance")
calRoamRoadDistance()
}
REMOVE_MARKER_MSG -> {
CallerLogger.d("$M_MAP$TAG", "remove marker")
overlayManager?.removeAllPointsInOwner(TAG)
@@ -208,44 +216,60 @@ class RoadCrossCameraManager : IMoGoMapRoadListener, IGaoDeMapLocationListener {
}
}
fun hasCrossCamera(): Boolean {
if(CallerMapUIServiceManager.getCityCode() == "010"){
private fun hasCrossCamera(camera: ((Boolean, CameraDeviceInfo?) -> Unit)) {
if (CallerMapUIServiceManager.getCityCode() == "010") {
roadCrossTrace(
TAG, mapOf("errorMsg" to "cityCode限制 - 北京无路口设备")
)
return false
camera.invoke(false, null)
}
val roadCrossEnd = CallerMapRoadListenerManager.getCrossEndInfo()
if(roadCrossEnd == null){
if (roadCrossEnd == null) {
roadCrossTrace(
TAG, mapOf("errorMsg" to "hasCrossCamera - 未获取到地图crossEnd数据")
)
return false
camera.invoke(false, null)
}
if (roadCrossCameraList == null) {
roadCrossTrace(
TAG, mapOf("errorMsg" to "hasCrossCamera - 未获取到全市路口设备信息")
)
return false
camera.invoke(false, null)
}
roadCrossCameraList?.forEach {
val result = (!it.roadUniqueId.isNullOrEmpty()
var result = false
roadCrossCameraList?.forEach { it ->
result = (!it.roadUniqueId.isNullOrEmpty()
&& it.roadUniqueId == roadCrossEnd)
if(result){
if (result) {
roadCrossTrace(
TAG, mapOf("errorMsg" to "hasCrossCamera - 遍历匹配路口数据命中 - $roadCrossEnd")
TAG,
mapOf("errorMsg" to "hasCrossCamera - 遍历匹配路口数据命中 - $roadCrossEnd")
)
return true
val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84()
val cameraInfo = it.deviceInfoList.minByOrNull { info ->
CoordinateUtils.calculateLineDistance(
info.lon,
info.lat,
loc.longitude,
loc.latitude
)
}
if (cameraInfo != null) {
camera.invoke(true, cameraInfo)
return@forEach
}
}
}
roadCrossTrace(
TAG, mapOf("errorMsg" to "hasCrossCamera - 均不匹配上述条件")
)
return false
if(!result){
roadCrossTrace(
TAG, mapOf("errorMsg" to "hasCrossCamera - 未匹配到路口信息 - $roadCrossEnd")
)
camera.invoke(false, null)
}
}
@SuppressLint("NewApi")
@@ -270,20 +294,102 @@ class RoadCrossCameraManager : IMoGoMapRoadListener, IGaoDeMapLocationListener {
override fun onRoadChange(cross: Boolean, roadCross: RoadCross?) {
super.onRoadChange(cross, roadCross)
// 出路口
if (!cross) {
handleRoadCrossRoam(false)
handleCameraMarker()
CallerLogger.d("$M_MAP$TAG", "经过路口,释放控制")
} else {
handleRoadCrossRoam(true)
}
}
private var cameraDis: CameraDeviceInfo? = null
private fun handleRoadCrossRoam(isCross: Boolean) {
CallerLogger.d("$M_MAP$TAG", "handleRoadCrossRoam , isCross:$isCross")
if (isCross) {
//停止handlerremove
cameraDis = null
handler.removeMessages(REQUEST_CAL_ROAD_DISTANCE)
CallerMapRoadListenerManager.invokeCrossDevice(false)
CallerLogger.d("$M_MAP$TAG", "emArrow 已过路口,清除判断")
} else {
//开启handler计算每隔一秒
handler.sendEmptyMessageDelayed(REQUEST_CAL_ROAD_DISTANCE, REQUEST_CAL_ROAD_DELAY_TIME)
CallerLogger.d("$M_MAP$TAG", "emArrow 路口内,开始计算")
}
}
private fun calRoamRoadDistance() {
//计算前方路口与marker最小距离 < 200 ,触发业务,回调
//到达触发距离可一直发如果业务方已经展示业务invoke取消handler
handler.removeMessages(REQUEST_CAL_ROAD_DISTANCE)
if (cameraDis != null) {
calDisInRange { b, dis ->
if(b){
CallerLogger.d("$M_MAP$TAG", "emArrow 距离内,多次计算,命中")
CallerMapRoadListenerManager.invokeCrossDevice(true)
}else{
//没有命中距离,继续计算
handler.sendEmptyMessageDelayed(REQUEST_CAL_ROAD_DISTANCE, REQUEST_CAL_ROAD_DELAY_TIME)
CallerLogger.d("$M_MAP$TAG", "emArrow 继续计算, dis:$dis")
}
}
return
}
hasCrossCamera { hasCamera, cameraDeviceInfo ->
if (hasCamera && cameraDeviceInfo != null) {
CallerLogger.d("$M_MAP$TAG", "emArrow 首次命中设备")
cameraDis = cameraDeviceInfo
calDisInRange { b, dis ->
if(b){
CallerLogger.d("$M_MAP$TAG", "emArrow 距离内,首次即命中")
CallerMapRoadListenerManager.invokeCrossDevice(true)
}else{
//没有命中距离,继续计算
handler.sendEmptyMessageDelayed(REQUEST_CAL_ROAD_DISTANCE, REQUEST_CAL_ROAD_DELAY_TIME)
CallerLogger.d("$M_MAP$TAG", "emArrow 继续计算, 首次 dis:$dis")
}
}
}else{
//没有命中设备,继续计算
handler.sendEmptyMessageDelayed(REQUEST_CAL_ROAD_DISTANCE, REQUEST_CAL_ROAD_DELAY_TIME)
CallerLogger.d("$M_MAP$TAG", "emArrow 没有命中设备${cameraDeviceInfo?:"空"}/路口${CallerMapRoadListenerManager.getCrossEndInfo()},继续计算")
}
}
}
private fun calDisInRange(range: ((Boolean, Float) -> Unit)) {
if (cameraDis == null) {
range.invoke(false, 0f)
return
}
val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84()
val dis = CoordinateUtils.calculateLineDistance(
cameraDis!!.lon,
cameraDis!!.lat,
loc.longitude,
loc.latitude
)
if (dis < 220 && dis >= 5) {
range.invoke(true, dis)
}else{
range.invoke(false,dis)
}
}
private fun handleCameraMarker() {
if (!isCameraRequest) {
CallerLogger.d("$M_MAP$TAG", "未触发路口获取marker")
return
}
if (!cross) {
// 停止请求摄像头数据
ndeRoadCameraNetWorkModel.cancelRequest("roadCross")
// 清除marker
CallerLogger.d("$M_MAP$TAG", "remove marker handler")
handler.sendEmptyMessageDelayed(REMOVE_MARKER_MSG, REMOVE_MARKER_DELAY_TIME)
// 释放控制
isCameraRequest = false
CallerLogger.d("$M_MAP$TAG", "经过路口,释放控制")
}
// 停止请求摄像头数据
ndeRoadCameraNetWorkModel.cancelRequest("roadCross")
// 清除marker
CallerLogger.d("$M_MAP$TAG", "handleCameraMarker remove marker handler")
handler.sendEmptyMessageDelayed(REMOVE_MARKER_MSG, REMOVE_MARKER_DELAY_TIME)
// 释放控制
isCameraRequest = false
}
private fun traceError(msg: String) {

View File

@@ -188,18 +188,9 @@ class RoadCrossRoamView @JvmOverloads constructor(
}
}
override fun onStopLineInfo(info: StopLine) {
super.onStopLineInfo(info)
val cross = CallerMapRoadListenerManager.getCrossEndInfo()
if (info.distance == 0.0 || info.distance > 200) {
if (cross != null && cross != "0") {
CallerLogger.d("$M_MAP$TAG", "未触发路口ID:$cross , 距离超出:${info.distance}")
}
return
}
CallerLogger.d("$M_MAP$TAG", "命中 before:$showState")
showState = info.distance in 100.0..200.0
CallerLogger.d("$M_MAP$TAG", "命中 after:$showState路口ID:$cross , dis:${info.distance}")
override fun onCrossDevice(trigger: Boolean) {
super.onCrossDevice(trigger)
showState = trigger
}
private fun attachView() {
@@ -234,17 +225,17 @@ class RoadCrossRoamView @JvmOverloads constructor(
CallerLogger.d("$M_MAP$TAG", "未触发路口ID:$cross")
return
}
if (!instance.hasCrossCamera()) {
CallerLogger.d("$M_MAP$TAG", "没有路侧设备,不做处理")
return
}
isShow = true
//播放语音
val dis = CallerMapRoadListenerManager.getStopLineDistance()?.toInt() ?: 0
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
var disStr = "前方即将通过路口,${SkinResources.getInstance().getString(R.string.operation_platform_name)}为您提供路口全息影像,助力出行"
var disStr = "前方即将通过路口,${
SkinResources.getInstance().getString(R.string.operation_platform_name)
}为您提供路口全息影像助力出行"
if (dis >= 80) {
disStr = "前方${dis}米将通过路口,${SkinResources.getInstance().getString(R.string.operation_platform_name)}为您提供路口全息影像,助力出行"
disStr = "前方${dis}米将通过路口,${
SkinResources.getInstance().getString(R.string.operation_platform_name)
}为您提供路口全息影像助力出行"
}
AIAssist.getInstance(context).speakTTSVoice(disStr)
}

View File

@@ -41,7 +41,7 @@
<com.mogo.eagle.core.function.view.MapRoamView
android:id="@+id/mapRoamView"
android:layout_width="@dimen/dp_540"
android:layout_width="@dimen/dp_593"
android:layout_height="@dimen/dp_300"
android:layout_marginTop="@dimen/dp_160"
app:layout_constraintLeft_toLeftOf="parent"
@@ -50,11 +50,11 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clScanningBg"
android:layout_width="@dimen/dp_540"
android:layout_width="@dimen/dp_593"
android:layout_height="@dimen/dp_300"
android:layout_marginTop="@dimen/dp_160"
android:layout_marginStart="@dimen/dp_32"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView