Merge branch 'dev_arch_opt_3.0' into dev_robobus-m1-p-app-module_1.0.0_230112_1.0.0

# Conflicts:
#	core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/OverMapView.kt
#	core/function-impl/mogo-core-function-map/src/main/res/values/attrs.xml
This commit is contained in:
yangyakun
2023-02-17 17:42:29 +08:00
5 changed files with 63 additions and 26 deletions

View File

@@ -17,6 +17,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84Lis
import com.mogo.eagle.core.function.call.obu.CallerObuLocationWGS84ListenerManager import com.mogo.eagle.core.function.call.obu.CallerObuLocationWGS84ListenerManager
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
import com.mogo.eagle.core.utilcode.util.CoordinateTransform import com.mogo.eagle.core.utilcode.util.CoordinateTransform
import com.mogo.eagle.core.utilcode.util.MultiDisplayUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils import com.mogo.eagle.core.utilcode.util.TimeUtils
import com.mogo.eagle.core.utilcode.util.Utils import com.mogo.eagle.core.utilcode.util.Utils
import com.mogo.support.obu.model.MogoObuHvBasicsData import com.mogo.support.obu.model.MogoObuHvBasicsData
@@ -124,6 +125,7 @@ object MoGoLocationDispatcher :
DataSourceType.TELEMATIC DataSourceType.TELEMATIC
) )
} }
MultiDisplayUtils.getOtherDisplay()
} }
/** /**

View File

@@ -1,5 +1,6 @@
package com.mogo.eagle.core.function.view package com.mogo.eagle.core.function.view
import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.Canvas import android.graphics.Canvas
@@ -12,6 +13,7 @@ import android.view.View
import android.widget.RelativeLayout import android.widget.RelativeLayout
import android.widget.TextView import android.widget.TextView
import androidx.annotation.MainThread import androidx.annotation.MainThread
import androidx.core.graphics.drawable.toBitmap
import ch.hsr.geohash.GeoHash import ch.hsr.geohash.GeoHash
import com.amap.api.maps.AMap import com.amap.api.maps.AMap
import com.amap.api.maps.CameraUpdate import com.amap.api.maps.CameraUpdate
@@ -68,6 +70,7 @@ class OverMapView @JvmOverloads constructor(
private var resetDrawable: Int = -1 private var resetDrawable: Int = -1
private var resetDrawableMarginRight: Int = -1 private var resetDrawableMarginRight: Int = -1
private var resetDrawableMarginBottom: Int = -1 private var resetDrawableMarginBottom: Int = -1
private var isClearArrived: Boolean = false
private var mMapView: TextureMapView? = null private var mMapView: TextureMapView? = null
private var mAMap: AMap? = null private var mAMap: AMap? = null
@@ -94,6 +97,7 @@ class OverMapView @JvmOverloads constructor(
// 计算索引并设置对应的Bitmap // 计算索引并设置对应的Bitmap
var arrivedBitmap: BitmapDescriptor? = null var arrivedBitmap: BitmapDescriptor? = null
var unArrivedBitmap: BitmapDescriptor? = null var unArrivedBitmap: BitmapDescriptor? = null
var transparentBitmap: BitmapDescriptor? = null
// 绘制轨迹线的集合 // 绘制轨迹线的集合
private val textureList: MutableList<BitmapDescriptor?> = ArrayList() private val textureList: MutableList<BitmapDescriptor?> = ArrayList()
@@ -123,8 +127,15 @@ class OverMapView @JvmOverloads constructor(
unArrivedDrawable = unArrivedDrawable =
typedArray.getResourceId(R.styleable.OverMapView_unArrivedDrawable, -1) typedArray.getResourceId(R.styleable.OverMapView_unArrivedDrawable, -1)
resetDrawable = typedArray.getResourceId(R.styleable.OverMapView_resetDrawable, -1) resetDrawable = typedArray.getResourceId(R.styleable.OverMapView_resetDrawable, -1)
resetDrawableMarginRight = typedArray.getResourceId(R.styleable.OverMapView_resetDrawableMarginRight, AutoSizeUtils.dp2px(context,40f)) resetDrawableMarginRight = typedArray.getResourceId(
resetDrawableMarginBottom = typedArray.getResourceId(R.styleable.OverMapView_resetDrawableMarginBottom, AutoSizeUtils.dp2px(context,40f)) R.styleable.OverMapView_resetDrawableMarginRight,
AutoSizeUtils.dp2px(context, 40f)
)
resetDrawableMarginBottom = typedArray.getResourceId(
R.styleable.OverMapView_resetDrawableMarginBottom,
AutoSizeUtils.dp2px(context, 40f)
)
isClearArrived = typedArray.getBoolean(R.styleable.OverMapView_isClearArrived, false)
typedArray.recycle() typedArray.recycle()
initView(context) initView(context)
} catch (e: Exception) { } catch (e: Exception) {
@@ -174,7 +185,12 @@ class OverMapView @JvmOverloads constructor(
* (anchorX,anchorY)为锚点坐标,各自取值范围为[0,1],默认值为(0.5,1) * (anchorX,anchorY)为锚点坐标,各自取值范围为[0,1],默认值为(0.5,1)
*/ */
@MainThread @MainThread
fun drawSiteMarkers(siteLatLngs: List<LatLng>?, bitmap: Bitmap, anchorX: Float, anchorY: Float) { fun drawSiteMarkers(
siteLatLngs: List<LatLng>?,
bitmap: Bitmap,
anchorX: Float,
anchorY: Float
) {
if (siteLatLngs.isNullOrEmpty()) return if (siteLatLngs.isNullOrEmpty()) return
clearSiteMarkers() clearSiteMarkers()
val markerOptionsList = ArrayList<MarkerOptions>() val markerOptionsList = ArrayList<MarkerOptions>()
@@ -214,31 +230,37 @@ class OverMapView @JvmOverloads constructor(
mEndMarker?.isVisible = false mEndMarker?.isVisible = false
} }
@SuppressLint("UseCompatLoadingForDrawables")
private fun initView(context: Context) { private fun initView(context: Context) {
mContext = context mContext = context
val smpView = LayoutInflater.from(context).inflate(R.layout.module_overview_map_view, this) val smpView = LayoutInflater.from(context).inflate(R.layout.module_overview_map_view, this)
mMapView = smpView.findViewById(R.id.aMapView) mMapView = smpView.findViewById(R.id.aMapView)
overLayerView = findViewById(R.id.overLayer) overLayerView = findViewById(R.id.overLayer)
overLayerView?.let { overLayerView?.background =
it.background = resources.getDrawable(if (resetDrawable != -1) resetDrawable else R.drawable.amap_reset)
resources.getDrawable(if (resetDrawable != -1) resetDrawable else R.drawable.amap_reset)
val layoutParams = it.layoutParams
layoutParams as RelativeLayout.LayoutParams
layoutParams.rightMargin =resetDrawableMarginRight
layoutParams.bottomMargin =resetDrawableMarginBottom
it.layoutParams = layoutParams
}
arrivedBitmap = arrivedBitmap =
BitmapDescriptorFactory.fromResource(if (arrivedDrawable != -1) arrivedDrawable else R.drawable.taxi_map_arrow_arrived) BitmapDescriptorFactory.fromResource(if (arrivedDrawable != -1) arrivedDrawable else R.drawable.taxi_map_arrow_arrived)
unArrivedBitmap = unArrivedBitmap =
BitmapDescriptorFactory.fromResource(if (unArrivedDrawable != -1) unArrivedDrawable else R.drawable.taxi_map_arrow_un_arrive) BitmapDescriptorFactory.fromResource(if (unArrivedDrawable != -1) unArrivedDrawable else R.drawable.taxi_map_arrow_un_arrive)
transparentBitmap = BitmapDescriptorFactory.fromBitmap(
resources.getDrawable(R.drawable.transparent_background, null)
.toBitmap(AutoSizeUtils.dp2px(context, 32f), AutoSizeUtils.dp2px(context, 230f))
)
CallerPlanningRottingListenerManager.addListener(TAG, this) CallerPlanningRottingListenerManager.addListener(TAG, this)
initAMapView(context) initAMapView(context)
// 注册定位监听 // 注册定位监听
CallerChassisLocationGCJ02ListenerManager.addListener(TAG, this) CallerChassisLocationGCJ02ListenerManager.addListener(TAG, this)
//设置全览模式 //设置全览模式
overLayerView?.setOnClickListener { displayCustomOverView() } overLayerView?.setOnClickListener { displayCustomOverView() }
overLayerView?.let {
it.background =
resources.getDrawable(if (resetDrawable != -1) resetDrawable else R.drawable.amap_reset)
val layoutParams = it.layoutParams
layoutParams as RelativeLayout.LayoutParams
layoutParams.rightMargin = resetDrawableMarginRight
layoutParams.bottomMargin = resetDrawableMarginBottom
it.layoutParams = layoutParams
}
} }
private fun initAMapView(context: Context) { private fun initAMapView(context: Context) {
@@ -523,7 +545,7 @@ class OverMapView @JvmOverloads constructor(
*/ */
private fun displayCustomOverView() { private fun displayCustomOverView() {
val linePointsLatLng = planningPoints val linePointsLatLng = planningPoints
if (linePointsLatLng.size > 1) { if (linePointsLatLng.size > 1 && mLocation != null) {
//圈定地图显示范围 //圈定地图显示范围
//存放经纬度 //存放经纬度
val boundsBuilder = LatLngBounds.Builder() val boundsBuilder = LatLngBounds.Builder()
@@ -607,15 +629,15 @@ class OverMapView @JvmOverloads constructor(
} }
for (i in coordinates.indices) { for (i in coordinates.indices) {
if (i <= locIndex) { if (i <= locIndex) {
// 已走过的置灰 if (isClearArrived) {
arrivedBitmap?.let { textureList.add(transparentBitmap)
textureList.add(it) } else {
// 已走过的置灰
textureList.add(arrivedBitmap)
} }
} else { } else {
// 未走过的纹理 // 未走过的纹理
unArrivedBitmap?.let { textureList.add(unArrivedBitmap)
textureList.add(it)
}
} }
texIndexList.add(i) texIndexList.add(i)
} }

View File

@@ -22,5 +22,7 @@
<attr name="resetDrawableMarginRight" format="dimension" /> <attr name="resetDrawableMarginRight" format="dimension" />
<!-- 重置位置图片下面margin --> <!-- 重置位置图片下面margin -->
<attr name="resetDrawableMarginBottom" format="dimension" /> <attr name="resetDrawableMarginBottom" format="dimension" />
<!-- 是否擦除已走过的路线 -->
<attr name="isClearArrived" format="boolean" />
</declare-styleable> </declare-styleable>
</resources> </resources>

View File

@@ -39,10 +39,11 @@ object MultiDisplayUtils {
// 获取除了内置屏幕(主屏幕)的其它屏幕 // 获取除了内置屏幕(主屏幕)的其它屏幕
val displays = mDisplayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION) val displays = mDisplayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION)
// 初始化新的集合进行接收排序后的屏幕信息 // 初始化新的集合进行接收排序后的屏幕信息
val displaysList = arrayOfNulls<Display>(displays.size) var displaysList = arrayOfNulls<Display>(displays.size)
// 判断副屏个数 // 判断副屏个数
if (displays.isNotEmpty()) { if (displays.isNotEmpty()) {
displaysList = arrayOfNulls(displays.size)
// 循环出来副屏幕进行重新排序 // 循环出来副屏幕进行重新排序
for (i in displays.indices) { for (i in displays.indices) {
// 这里如果需要固定某个屏幕, 使用 if( display.toString().indexOf("port=1")!=-1) ) 而不是使用 display[i] // 这里如果需要固定某个屏幕, 使用 if( display.toString().indexOf("port=1")!=-1) ) 而不是使用 display[i]
@@ -62,6 +63,18 @@ object MultiDisplayUtils {
} }
} }
} }
// 处理EB5副屏幕
else {
if (mDisplayManager.displays.isNotEmpty()) {
displaysList = arrayOfNulls(1)
// EB5目前副屏幕ID为固定4096
for (i in mDisplayManager.displays.indices) {
if (mDisplayManager.displays[i].displayId == 4096) {
displaysList[0] = mDisplayManager.displays[i]
}
}
}
}
return displaysList return displaysList
} }
@@ -83,11 +96,9 @@ object MultiDisplayUtils {
* @param activity 要在第二个屏幕启动的页面 * @param activity 要在第二个屏幕启动的页面
*/ */
fun startActWithSecond(context: Context, activity: Class<*>) { fun startActWithSecond(context: Context, activity: Class<*>) {
val launchDisplayId: Int
if (isSupportMultiDisplay(context)) { if (isSupportMultiDisplay(context)) {
if (getOtherDisplay().size > 1 && getOtherDisplay()[0] != null) { if (getOtherDisplay().isNotEmpty() && getOtherDisplay()[0] != null) {
launchDisplayId = getOtherDisplay()[0]!!.displayId val launchDisplayId = getOtherDisplay()[0]!!.displayId
// 要加上Intent.FLAG_ACTIVITY_NEW_TASK // 要加上Intent.FLAG_ACTIVITY_NEW_TASK
val options = ActivityOptions.makeBasic() val options = ActivityOptions.makeBasic()
options.launchDisplayId = launchDisplayId options.launchDisplayId = launchDisplayId

View File

@@ -213,7 +213,7 @@ public class AutopilotAbilityManager {
if (!IDENTITY_MODE.BUS_DRIVER_VAN.equalsIgnoreCase(identityMode)) { if (!IDENTITY_MODE.BUS_DRIVER_VAN.equalsIgnoreCase(identityMode)) {
//金旅Bus和清扫车 档位不正常 //金旅Bus和清扫车 档位不正常
if (IDENTITY_MODE.BUS_DRIVER_BASE.equalsIgnoreCase(identityMode) || IDENTITY_MODE.SWEEPER_DRIVER_FT.equalsIgnoreCase(identityMode)) { if (IDENTITY_MODE.BUS_DRIVER_BASE.equalsIgnoreCase(identityMode) || IDENTITY_MODE.SWEEPER_DRIVER_FT.equalsIgnoreCase(identityMode)) {
if (gear == Chassis.GearPosition.GEAR_N) { if (gear == Chassis.GearPosition.GEAR_N || gear == Chassis.GearPosition.GEAR_R) {
isAutopilotAbility = false; isAutopilotAbility = false;
unableAutopilotReason = "挡位不正常"; unableAutopilotReason = "挡位不正常";
} }