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()} @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 FunctionBuildConfig.loginMode = BuildConfig.loginMode // 各个module需要的url FunctionBuildConfig.urlJson = GsonUtils.fromJson(BuildConfig.URLs, UrlConfig::class.java) // 各车型宣传视频本地配置json FunctionBuildConfig.mediaUrlConfig = BuildConfig.mediaUrlConfig //是否支持Patch升级 FunctionBuildConfig.isSupportPatchUpgrade = BuildConfig.IS_SUPPORT_PATCH_UPGRADE // app安装的身份信息 // 这里影响当前Activity的身份信息,多进程,主进程为司机端,:passenger 进程为乘客端 // TODO emArrow isMultiDisplay暂时不启用,仅测试3588,在B2 2024车预研 if(BuildConfig.enableSweeper==true){ FunctionBuildConfig.appIdentityMode = "Sweeper_${BuildConfig.APP_IDENTITY_MODE_BODY}_C1" }else { FunctionBuildConfig.appIdentityMode = "Product_${BuildConfig.APP_IDENTITY_MODE_BODY}_Vehicle" } // 不同身份对应不同的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.setEnvFlavor(BuildConfig.FLAVOR_env) DebugConfig.setSocketAppId(BuildConfig.SOCKET_APP_ID) DebugConfig.setMapVersion(BuildConfig.MAP_SDK_VERSION) DebugConfig.setMapOptVersion(BuildConfig.MAP_SDK_OPT_VERSION) } private fun initOtherConfig(context: Context) { if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { //是否显示 限速UI HmiBuildConfig.isShowLimitingVelocityView = false //白天模式 FunctionBuildConfig.skinMode = 1 } val mapParams = MapParams.init() mapParams.setDebugMode(false) // 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) { 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, 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) { 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) {} }