196 lines
9.9 KiB
Kotlin
196 lines
9.9 KiB
Kotlin
package com.mogo.launcher.startup
|
||
|
||
import android.content.Context
|
||
import com.autonavi.nge.hdmap.HDMapProvider
|
||
import com.google.gson.reflect.TypeToken
|
||
import com.mogo.commons.debug.DebugConfig
|
||
import com.mogo.eagle.core.data.app.AppConfigInfo
|
||
import com.mogo.eagle.core.data.app.UrlConfig
|
||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||
import com.mogo.eagle.core.data.config.HmiBuildConfig
|
||
import com.mogo.eagle.core.data.config.JunkConfig
|
||
import com.mogo.eagle.core.data.deva.chain.ChainConstant
|
||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
|
||
import com.mogo.eagle.core.utilcode.util.GsonUtils
|
||
import com.mogo.eagle.core.utilcode.util.ProcessUtils
|
||
import com.mogo.eagle.core.utilcode.util.StringUtils
|
||
import com.mogo.launcher.BuildConfig
|
||
import com.shuyu.gsyvideoplayer.player.IjkPlayerManager
|
||
import com.zhidaoauto.map.sdk.open.MapAutoApi
|
||
import com.zhidaoauto.map.sdk.open.MapParams
|
||
import com.zhjt.mogo_core_function_devatools.env.EnvChangeManager
|
||
import com.zhjt.service.chain.ChainLog
|
||
import tv.danmaku.ijk.media.player.IjkMediaPlayer
|
||
import java.util.concurrent.atomic.AtomicReference
|
||
|
||
object ConfigStartUp {
|
||
|
||
private const val TAG = "ConfigStartUp"
|
||
|
||
private val redisCallback by lazy { AtomicReference<HDMapProvider.IRedisLoadCallback>()}
|
||
|
||
@JvmStatic
|
||
fun init(context: Context) {
|
||
initDebugConfig()
|
||
initBuildConfig()
|
||
initOtherConfig(context)
|
||
}
|
||
|
||
private fun initBuildConfig() {
|
||
//ijk关闭log
|
||
IjkPlayerManager.setLogLevel(IjkMediaPlayer.IJK_LOG_SILENT);
|
||
|
||
// 初始化构建APP的时候的分支及提交HASH,用于辅助定位问题
|
||
AppConfigInfo.workingBranchName = BuildConfig.WORKING_BRANCH_NAME
|
||
AppConfigInfo.workingBranchHash = BuildConfig.WORKING_BRANCH_HASH
|
||
AppConfigInfo.appBuildTime = BuildConfig.APP_BUILD_TIME
|
||
AppConfigInfo.flavor = BuildConfig.FLAVOR
|
||
// 使用与渠道配置一样的gps提供者提供的数据,app/productFlavors/fPadLenovo.gradle GPS_PROVIDER 0-Android系统,1-工控机,2-OBU
|
||
FunctionBuildConfig.gpsProvider = BuildConfig.GPS_PROVIDER
|
||
// 演示模式,上一次勾选的数据
|
||
FunctionBuildConfig.isDemoMode = BuildConfig.IS_DEMO_MODE
|
||
FunctionBuildConfig.ttsLanguage = BuildConfig.ttsLanguage
|
||
// 支持的业务类型
|
||
if(!StringUtils.isEmpty(BuildConfig.supportBusiness)&&BuildConfig.supportBusiness!="null"){
|
||
FunctionBuildConfig.supportBusiness = GsonUtils.fromJson(BuildConfig.supportBusiness, object : TypeToken<MutableList<String>>() {}.type)
|
||
}
|
||
// 各个module需要的url
|
||
FunctionBuildConfig.urlJson = GsonUtils.fromJson(BuildConfig.URLs, UrlConfig::class.java)
|
||
//不能启动自动驾驶的档位
|
||
FunctionBuildConfig.launchAutopilotGear = BuildConfig.LAUNCH_AUTOPILOT_GEAR
|
||
// 各车型宣传视频本地配置json
|
||
FunctionBuildConfig.mediaUrlConfig = BuildConfig.mediaUrlConfig
|
||
FunctionBuildConfig.musicUrlConfig = BuildConfig.musicUrlConfig
|
||
|
||
//是否支持Patch升级
|
||
FunctionBuildConfig.isSupportPatchUpgrade = BuildConfig.IS_SUPPORT_PATCH_UPGRADE
|
||
|
||
// app安装的身份信息
|
||
// 这里影响当前Activity的身份信息,多进程,主进程为司机端,:passenger 进程为乘客端
|
||
// TODO emArrow isMultiDisplay暂时不启用,仅测试3588,在B2 2024车预研
|
||
if (DebugConfig.isMultiDisplay()) {
|
||
if(ProcessUtils.getCurrentProcessName().contains("passenger")){
|
||
FunctionBuildConfig.appIdentityMode = "Product_Passenger_${BuildConfig.APP_IDENTITY_MODE_TAIL}"
|
||
}else{
|
||
FunctionBuildConfig.appIdentityMode = "Product_Driver_${BuildConfig.APP_IDENTITY_MODE_TAIL}"
|
||
}
|
||
}else{
|
||
FunctionBuildConfig.appIdentityMode = "Product_${BuildConfig.APP_IDENTITY_MODE_BODY}_${BuildConfig.APP_IDENTITY_MODE_TAIL}"
|
||
}
|
||
// 不同身份对应不同的IP地址
|
||
FunctionBuildConfig.adasConnectIP = BuildConfig.ADAS_CONNECT_IP
|
||
// 是否开启secure校验
|
||
FunctionBuildConfig.isSecure = BuildConfig.secure
|
||
// 清扫车 默认业务模式
|
||
FunctionBuildConfig.sweeperDefaultMode = BuildConfig.SWEEPER_DEFAULT_MODE
|
||
// 清扫车 是否能切换当前业务模式
|
||
FunctionBuildConfig.sweeperCanSwitchMode = BuildConfig.SWEEPER_CAN_SWITCH_MODE
|
||
|
||
//是否开启卡顿检测
|
||
JunkConfig.isSupportJunkDetect = BuildConfig.IS_SUPPORT_JUNK_DETECT
|
||
}
|
||
|
||
private fun initDebugConfig() {
|
||
var mode = BuildConfig.NET_ENV
|
||
val envConfig = EnvChangeManager.getEnvConfig()
|
||
if (envConfig != null) {
|
||
mode = envConfig.netMode
|
||
}
|
||
DebugConfig.setNetMode(mode)
|
||
DebugConfig.setDebug(BuildConfig.DEBUG)
|
||
DebugConfig.setLauncher(BuildConfig.IS_LAUNCHER)
|
||
DebugConfig.setCarMachineType(BuildConfig.CAR_MACHINE_TYPE)
|
||
// todo DebugConfig.setProductFlavor(BuildConfig.FLAVOR_product)
|
||
DebugConfig.setProjectFlavor(BuildConfig.FLAVOR_project)
|
||
DebugConfig.setSocketAppId(BuildConfig.SOCKET_APP_ID)
|
||
DebugConfig.setMapVersion(BuildConfig.MAP_SDK_VERSION)
|
||
DebugConfig.setMapOptVersion(BuildConfig.MAP_SDK_OPT_VERSION)
|
||
DebugConfig.setMultiDisplay(BuildConfig.IS_MULTI_DISPLAY)
|
||
DebugConfig.setCarModelChange(BuildConfig.IS_CAR_MODEL_CHANGE)
|
||
}
|
||
|
||
private fun initOtherConfig(context: Context) {
|
||
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
|
||
//是否显示 限速UI
|
||
HmiBuildConfig.isShowLimitingVelocityView = false
|
||
//白天模式
|
||
FunctionBuildConfig.skinMode = 1
|
||
}
|
||
|
||
val mapParams = MapParams.init()
|
||
mapParams.setDebugMode(true)
|
||
// 1-使用本地地图数据,0-使用在线地图数据
|
||
// .setDataFileSource(1)
|
||
.setIsRecordLogs(false)
|
||
.setCoordinateType(MapParams.COORDINATETYPE_GCJ02)
|
||
MapAutoApi.init(context, mapParams)
|
||
HDMapProvider.setRedisDataLoadCallback(object : HDMapProvider.IRedisLoadCallback {
|
||
|
||
override fun onLoginStart(ip: String, port: Int, password: String, dbIndex: Int) {
|
||
Logger.d(TAG, "-- onLoginStart --: ip: $ip, port: $port, password: $password, dbIndex: $dbIndex")
|
||
onRedisDataLoadRoute(mapOf("onLoginStart" to "ip:$ip, port:$port, password: $password, dbIndex: $dbIndex"))
|
||
}
|
||
|
||
|
||
override fun onLoginSuccess() {
|
||
Logger.d(TAG, "-- onLoginSuccess --")
|
||
onRedisDataLoadRoute(mapOf("onLoginSuccess" to ""))
|
||
}
|
||
|
||
override fun onLoginFailed(error: String?) {
|
||
Logger.d(TAG, "-- onLoginFailed($error) --")
|
||
onRedisDataLoadRoute(mapOf("onLoginFailed" to "fail_reason:$error"))
|
||
}
|
||
|
||
override fun onReLogin(isCanRetry: Boolean) {
|
||
Logger.d(TAG, "-- onReLogin($isCanRetry) --")
|
||
onRedisDataLoadRoute(mapOf("onReLogin" to "isCanRetry:$isCanRetry"))
|
||
}
|
||
|
||
override fun onTileLoadStart(layerId: String, tileId: String) {
|
||
Logger.d(TAG, "-- onTileLoadStart(layerId: $layerId, tileId: $tileId) --")
|
||
onRedisDataLoadRoute(mapOf("onTileLoadStart" to "layerId: $layerId, tileId: $tileId"))
|
||
}
|
||
|
||
override fun onTileLoadFail(layerId: String, tileId: String, error: String) {
|
||
Logger.d(TAG, "-- onTileLoadFail(layerId: $layerId, tileId: $tileId, error: $error) --")
|
||
onRedisDataLoadRoute(mapOf("onTileLoadFail" to "layerId: $layerId, tileId: $tileId, error: $error"))
|
||
}
|
||
|
||
override fun onTileLoadSuccess(layerId: String, tileId: String) {
|
||
Logger.d(TAG, "-- onTileLoadSuccess(layerId: $layerId, tileId: $tileId) --")
|
||
onRedisDataLoadRoute(mapOf("onTileLoadSuccess" to "layerId: $layerId, tileId: $tileId"))
|
||
}
|
||
|
||
override fun onTilesLoadStart(layerId: String, tileIds: List<String>) {
|
||
Logger.d(TAG, "-- onTilesLoadStart(layerId: $layerId, tileIds: ${tileIds.joinToString(",")}) --")
|
||
onRedisDataLoadRoute(mapOf("onTilesLoadStart" to "layerId: $layerId, tileIds: ${tileIds.joinToString(",")}"))
|
||
}
|
||
|
||
override fun onTilesLoadFail(layerId: String, tileIds: List<String>, error: String?) {
|
||
Logger.d(TAG, "-- onTilesLoadFail(layerId: $layerId, tileIds: ${tileIds.joinToString(",")}, error: $error) --")
|
||
onRedisDataLoadRoute(mapOf("onTilesLoadFail" to "layerId: $layerId, tileIds: ${tileIds.joinToString(",")}, error:$error"))
|
||
}
|
||
|
||
|
||
override fun onTilesLoadSuccess(layerId: String, tileIds: List<String>) {
|
||
Logger.d(TAG, "-- onTilesLoadSuccess(layerId: $layerId, tileIds: ${tileIds.joinToString(",")}) --")
|
||
onRedisDataLoadRoute(mapOf("onTilesLoadSuccess" to "layerId: $layerId, tileIds: ${tileIds.joinToString(",")}"))
|
||
}
|
||
}.also {
|
||
redisCallback.set(it) // 将此回调保存起来,只为了在native层的引用不回收,因为native层的引用是全局弱引用
|
||
})
|
||
|
||
// HDMapProvider.toggleSystrace(true) // 开启systrace, 此功能默认关闭,只要在开发阶段定位渲染问题时才打开。(前提需要在地图sdk在关键节点进行手动打点后,再开启,之后使用systrace工具进行抓取trace文件进行分析)
|
||
// HDMapProvider.toggleMapDataDebugInfo(true) // 打开地图调试信息的文字展示,此功能也默认关闭,只有在地图测试工具中使用
|
||
}
|
||
|
||
@ChainLog(
|
||
linkChainLog = ChainConstant.CHAIN_TYPE_STATUS,
|
||
linkCode = ChainConstant.CHAIN_SOURCE_CLOUD,
|
||
nodeAliasCode = ChainConstant.CHAIN_CODE_REDIS_DATA_LOAD,
|
||
paramIndexes = [0]
|
||
)
|
||
private fun onRedisDataLoadRoute(extra: Map<String, Any>) {}
|
||
} |