diff --git a/config.gradle b/config.gradle index 031da09377..ee98fd6a33 100644 --- a/config.gradle +++ b/config.gradle @@ -215,7 +215,7 @@ ext { btrace : "com.bytedance.btrace:rhea-core:2.0.0", mofang_runtime : "com.mogo.eagle.core.mofang:runtime:2.0.6", - log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.8", + log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.9", // 安全证书 passport_secret : "com.zhidaoauto:sdk-java:1.0.5-SNAPSHOT", diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt index 2b52095da7..fd87bac403 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt @@ -1,6 +1,7 @@ package com.zhjt.mogo_core_function_devatools.logcat import android.content.* +import android.os.Build import android.os.Process import android.os.SystemClock import android.util.Log @@ -10,6 +11,9 @@ import com.mogo.commons.AbsMogoApplication import com.mogo.core.log.record.* import com.mogo.core.log.record.config.* import com.mogo.core.log.record.config.crash.* +import com.mogo.core.log.record.config.state.IStateProvider +import com.mogo.core.log.record.model.UploadError +import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.function.api.devatools.logcat.* import com.zhidao.loglib.bean.RemoteLogPushContent import com.zhjt.mogo_core_function_devatools.logcat.config.LogRecordConfig @@ -43,6 +47,62 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider, .recordDir(File(context.getExternalFilesDir(null), "logcat")) .pid(Process.myPid()) .generateZipDir(zipDir.absolutePath) + .stateProvider(object : IStateProvider { + override fun provide(divider:String?): Map { + return mutableMapOf().also { itx -> + itx["build_sdk_version"] = Build.VERSION.SDK_INT + itx["build_device"] = Build.DEVICE + itx["build_host"] = Build.HOST + itx["build_id"] = Build.ID + itx["build_host"] = Build.HOST + itx["build_brand"] = Build.BRAND + itx["build_model"] = Build.MODEL + itx["build_product"] = Build.PRODUCT + itx["build_board"] = Build.BOARD + itx["build_bootloader"] = Build.BOOTLOADER + itx["${divider}-1"] = divider + itx["应用名称"] = AppConfigInfo.appName + itx["应用版本名称"] = AppConfigInfo.appVersionName + itx["应用版本号"] = AppConfigInfo.appVersionCode + itx["渠道"] = AppConfigInfo.flavor + itx["GIT分支"] = AppConfigInfo.workingBranchName + itx["GIT分支HASH"] = AppConfigInfo.workingBranchHash + itx["${divider}-2"] = divider + itx["MAP-SDK版本"] = AppConfigInfo.mapSdkVersion + itx["MAP-OPT-SDK版本"] = AppConfigInfo.mapSdkOptVersion + itx["ADAS-SDK版本"] = AppConfigInfo.adasSdkVersion + itx["${divider}-3"] = divider + itx["OBU-SDk版本"] = AppConfigInfo.obuSdkVersion + itx["OBU-INFO"] = AppConfigInfo.obuInfo + itx["${divider}-4"] = divider + itx["数字版权ID"] = AppConfigInfo.widevineIDMd5 + itx["设备唯一标识"] = AppConfigInfo.uniqueDeviceId + itx["中台分配的SN"] = AppConfigInfo.mogoSN + itx["中台分配的令牌"] = AppConfigInfo.mogoToken + itx["当前网络连接模式"] = AppConfigInfo.netMode + itx["网络是否正常"] = AppConfigInfo.isConnectNet + itx["Socket是否正常"] = AppConfigInfo.isConnectSocket + itx["ADAS连接是否正常"] = AppConfigInfo.isConnectAutopilot + itx["OBU连接是否正常"] = AppConfigInfo.isConnectObu + itx["连接工控机状态描述"] = AppConfigInfo.connectStatusDescribe + itx["${divider}-5"] = divider + itx["是否司机端"] = AppConfigInfo.isDriver + itx["是否是乘客端"] = !AppConfigInfo.isDriver + if (!AppConfigInfo.isDriver) { + itx["当前车机是乘客屏,对应的司机屏SN"] = AppConfigInfo.serverSn + } + itx["司乘屏连接状态"] = AppConfigInfo.isConnectedNetty + itx["${divider}-6"] = divider + itx["车牌号"] = AppConfigInfo.plateNumber + itx["mac"] = AppConfigInfo.iPCMacAddress + itx["docker版本"] = AppConfigInfo.dockerVersion + itx["协议版本号"] = AppConfigInfo.protocolVersionNumber + itx["${divider}-7"] = divider + itx["角色"] = AppConfigInfo.role + + } + } + }) .crashConfig(CrashConfig.Builder() .enabled(true) .crashDir(File(context.getExternalFilesDir(null), "logcat/crash")) @@ -119,6 +179,13 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider, return LogcatManager.export() } + override fun upload(): Unit = runBlocking { + val state = LogcatManager.upload(0, System.currentTimeMillis()) + if (state is UploadError) { + throw AssertionError(state.toString()) + } + } + override fun testJavaCrash(runOnNewThread: Boolean) { LogcatManager.testJavaCrash(runOnNewThread) } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/uploader/LogRecordUploader.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/uploader/LogRecordUploader.kt index 03f1145b63..5600de0d8d 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/uploader/LogRecordUploader.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/uploader/LogRecordUploader.kt @@ -8,10 +8,11 @@ import com.zhidao.cosupload.callback.CosStatusCallback import com.zhidao.cosupload.callback.CosStatusCallbackManager import com.zhidao.cosupload.model.CallbackData import com.zhidao.loglib.upload.UploadManager -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.asCoroutineDispatcher -import kotlinx.coroutines.flow.channelFlow -import kotlinx.coroutines.flow.firstOrNull +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn internal class LogRecordUploader : ILogcatUploader { @@ -20,10 +21,10 @@ internal class LogRecordUploader : ILogcatUploader { private const val TAG = "LogRecordUploader" } - @OptIn(ExperimentalCoroutinesApi::class) override suspend fun upload(startTime: Long, endTime: Long, generatedZipPath: String): UploadState = - channelFlow { + flow { Log.d(TAG, "---- 开始上传 --- 1 ---") + val channel = Channel() CosStatusCallbackManager.getInstance().register(object : CosStatusCallback { override fun onStartUpload(data: CallbackData?) { @@ -35,7 +36,7 @@ internal class LogRecordUploader : ILogcatUploader { override fun uploadCosCompleted(data: CallbackData?) { if (data?.localPath == generatedZipPath) { Log.d(TAG, "---- uploadCosCompleted ---: $data") - trySend(UploadSuccess) + channel.trySend(UploadSuccess) CosStatusCallbackManager.getInstance().unregister(this) } } @@ -43,7 +44,7 @@ internal class LogRecordUploader : ILogcatUploader { override fun uploadCosFailed(data: CallbackData?) { if (data?.localPath == generatedZipPath) { Log.d(TAG, "---- uploadCosFailed ---: $data") - trySend(UploadError(Reason(data.exception))) + channel.trySend(UploadError(Reason(data.exception))) CosStatusCallbackManager.getInstance().unregister(this) } } @@ -58,8 +59,13 @@ internal class LogRecordUploader : ILogcatUploader { UploadManager.getInstance().uploadSingleFile(generatedZipPath) } catch (t: Throwable) { Log.d(TAG, "---- 上传失败 ---: ${t.message}") - trySend(UploadError(Reason(t.message ?: ""))) + channel.send(UploadError(Reason(t.message ?: ""))) } - }.flowOn(ThreadUtils.getIoPool().asCoroutineDispatcher()).firstOrNull() ?: UploadError(Reason("UnKnown reason")) + val iterator = channel.iterator() + while (iterator.hasNext()) { + val next = iterator.next() + emit(next) + } + }.flowOn(ThreadUtils.getIoPool().asCoroutineDispatcher()).filter { it is UploadError || it == UploadSuccess }.first() } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index 2f325239a7..9afcb519c2 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -7,8 +7,8 @@ import android.content.ClipboardManager import android.content.Context import android.content.Intent import android.graphics.Color +import android.net.* import android.os.Build -import android.os.Looper import android.os.Process import android.text.Html import android.util.AttributeSet @@ -19,8 +19,7 @@ import androidx.appcompat.widget.PopupMenu import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import androidx.core.content.FileProvider -import androidx.core.view.MenuCompat -import androidx.core.view.isVisible +import androidx.core.view.* import androidx.lifecycle.lifecycleScope import chassis.Chassis import com.mogo.cloud.passport.MoGoAiCloudClient @@ -39,19 +38,19 @@ import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_FULL_ import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RAIN_MODE import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_WARNING_UPLOAD import com.mogo.eagle.core.data.deva.chain.ChainConstant -import com.mogo.eagle.core.data.deva.report.ReportEntity import com.mogo.eagle.core.data.deva.scene.SceneModule import com.mogo.eagle.core.data.enums.TrafficTypeEnum import com.mogo.eagle.core.data.gnss.AccelerationEntity 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.data.deva.report.ReportEntity +import com.mogo.eagle.core.data.multidisplay.TelematicConstant import com.mogo.eagle.core.function.api.autopilot.* -import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuConnectListener -import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuInfoListener import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsFuncConfigListener import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener +import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuConnectListener +import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuInfoListener import com.mogo.eagle.core.function.call.autopilot.* import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsFuncConfigListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager @@ -65,10 +64,7 @@ import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.ui.logcatch.ILogViewListener import com.mogo.eagle.core.function.hmi.ui.logcatch.LogInfoView -import com.mogo.eagle.core.utilcode.kotlin.currentPadding -import com.mogo.eagle.core.utilcode.kotlin.lifecycleOwner -import com.mogo.eagle.core.utilcode.kotlin.onClick -import com.mogo.eagle.core.utilcode.kotlin.scope +import com.mogo.eagle.core.utilcode.kotlin.* import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.LogLevel import com.mogo.eagle.core.utilcode.mogo.logger.Logger @@ -77,10 +73,11 @@ import com.mogo.eagle.core.utilcode.mogo.permissions.BackgrounderPermission import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr import com.mogo.eagle.core.utilcode.mogo.toast.TipToast import com.mogo.eagle.core.utilcode.util.* -import com.mogo.map.MogoData.Companion.mogoMapData +import com.mogo.map.hdcache.IHdCacheListener import com.mogo.map.uicontroller.VisualAngleMode import com.mogo.map.uicontroller.VisualAngleMode.* import kotlinx.android.synthetic.main.view_debug_setting.view.* +import kotlinx.android.synthetic.main.view_debug_setting.view.tbRouteDynamicEffect import kotlinx.coroutines.* import mogo.telematics.pad.MessagePad import mogo_msg.MogoReportMsg @@ -194,10 +191,10 @@ internal class DebugSettingView @JvmOverloads constructor( */ private val timerTaskRefresh = object : TimerTask() { override fun run() { - if (this@DebugSettingView == null) { + if(this@DebugSettingView == null){ return } - if (!isRunCheck) { + if(!isRunCheck){ return } UiThreadHandler.post { @@ -295,12 +292,11 @@ internal class DebugSettingView @JvmOverloads constructor( } } - @SuppressLint("SetTextI18n") private fun initView() { post { - val maxHeight = ScreenUtils.getScreenHeight() - BarUtils.getStatusBarHeight() + val maxHeight = ScreenUtils.getScreenHeight()-BarUtils.getStatusBarHeight() val height = clDebugContain.height - if (height > maxHeight) { + if(height>maxHeight){ val layoutParamsOther = clDebugContain.layoutParams layoutParamsOther.height = maxHeight clDebugContain.layoutParams = layoutParamsOther @@ -591,11 +587,10 @@ internal class DebugSettingView @JvmOverloads constructor( if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { ThreadUtils.getIoPool().execute { - mogoMapData.get().isCityDataCached { - isHDCached = it - UiThreadHandler.post { - btn_cache_hd_map.text = "缓存高精离线地图(${if (it) "已是最新版" else "待更新"}!)" - } + val isCached = CallerMapUIServiceManager.isCityDataCached() + isHDCached = isCached + UiThreadHandler.post { + btn_cache_hd_map.text = "缓存高精离线地图(${if (isCached) "已是最新版" else "待更新"}!)" } } btn_cache_hd_map.visibility = View.VISIBLE @@ -631,15 +626,9 @@ internal class DebugSettingView @JvmOverloads constructor( */ tbControlPassengerDriverMonitor.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { - CallerTelematicManager.sendMsgToAllClients( - TelematicConstant.CONTROL_PASSENGER_DRIVER_MONITOR, - "1".toByteArray() - ) + CallerTelematicManager.sendMsgToAllClients(TelematicConstant.CONTROL_PASSENGER_DRIVER_MONITOR, "1".toByteArray()) } else { - CallerTelematicManager.sendMsgToAllClients( - TelematicConstant.CONTROL_PASSENGER_DRIVER_MONITOR, - "0".toByteArray() - ) + CallerTelematicManager.sendMsgToAllClients(TelematicConstant.CONTROL_PASSENGER_DRIVER_MONITOR, "0".toByteArray()) } } @@ -665,8 +654,7 @@ internal class DebugSettingView @JvmOverloads constructor( // 初始化OBU IP信息 val ipAddress = - SharedPrefsMgr.getInstance(context) - .getString(MoGoConfig.OBU_IP, MogoObuConst.OBU_DEFAULT_IP) + SharedPrefsMgr.getInstance(context).getString(MoGoConfig.OBU_IP, MogoObuConst.OBU_DEFAULT_IP) etObuIP.setText(ipAddress) etObuIP.text?.let { etObuIP.setSelection(it.length) } @@ -718,11 +706,9 @@ internal class DebugSettingView @JvmOverloads constructor( } tbIsStrictMode?.also { - it.isChecked = SharedPrefs.getInstance(Utils.getApp()) - .getBoolean("MOGO_STRICT_MODE_ENABLED", false) + it.isChecked = SharedPrefs.getInstance(Utils.getApp()).getBoolean("MOGO_STRICT_MODE_ENABLED", false) it.setOnCheckedChangeListener { _, isChecked -> - SharedPrefs.getInstance(Utils.getApp()) - .putBoolean("MOGO_STRICT_MODE_ENABLED", isChecked) + SharedPrefs.getInstance(Utils.getApp()).putBoolean("MOGO_STRICT_MODE_ENABLED", isChecked) scope.launch { ToastUtils.showShort("配置生效, 2秒后重启应用...") delay(2000) @@ -868,8 +854,7 @@ internal class DebugSettingView @JvmOverloads constructor( } else { try { val cloudSizeFloat = cloudSize.toFloat() - CallerMapUIServiceManager.getMapUIController() - ?.setPointCloudSize(cloudSizeFloat) + CallerMapUIServiceManager.getMapUIController()?.setPointCloudSize(cloudSizeFloat) } catch (e: Exception) { ToastUtils.showShort("点云大小格式输入不正确") } @@ -915,7 +900,7 @@ internal class DebugSettingView @JvmOverloads constructor( tbADASLog.isChecked = CallerAutoPilotControlManager.isEnableLog() //如果工控机异常上报列表窗口为展示状态,则显示上报异常布局 - if (CallerDevaToolsManager.getReportWindowStatus()) { + if(CallerDevaToolsManager.getReportWindowStatus()){ reportMsgLayout.visibility = View.VISIBLE tbReportMore.isChecked = true } @@ -948,7 +933,7 @@ internal class DebugSettingView @JvmOverloads constructor( clipboardManager?.setPrimaryClip( ClipData.newPlainText( "DockVersion", - CallerAutoPilotStatusListenerManager.getDockerVersion() ?: "" + CallerAutoPilotStatusListenerManager.getDockerVersion()?:"" ) ) ToastUtils.showLong("docker版本复制成功") @@ -1038,7 +1023,7 @@ internal class DebugSettingView @JvmOverloads constructor( //设置连接司机屏IP btnConnectServerIp.setOnClickListener { val ip = etConnectServerIp.text.toString() - if (!ip.isEmpty()) { + if (!ip.isNullOrEmpty()) { CallerAutoPilotControlManager.connectSpecifiedServer(ip) } } @@ -1061,15 +1046,13 @@ internal class DebugSettingView @JvmOverloads constructor( } if (!AppIdentityModeUtils.isTaxiDriver(FunctionBuildConfig.appIdentityMode) - && !AppIdentityModeUtils.isBusDriver(FunctionBuildConfig.appIdentityMode) - ) { + && !AppIdentityModeUtils.isBusDriver(FunctionBuildConfig.appIdentityMode)){ tbStartAutopilotCommand.visibility = GONE } //切换环境 - tvCurEnv.text = - "当前环境:${CallerDevaToolsManager.getEnvCityName()}${CallerDevaToolsManager.getEnvNetMode()}" + tvCurEnv.text = "当前环境:${CallerDevaToolsManager.getEnvCityName()}${CallerDevaToolsManager.getEnvNetMode()}" btChangeEnv.onClick { PopupMenu(context, btChangeEnv).also { p -> p.menuInflater.inflate(R.menu.menu_env_pop, p.menu) @@ -1085,22 +1068,13 @@ internal class DebugSettingView @JvmOverloads constructor( R.id.env_reset -> CallerDevaToolsManager.envConfigReset() R.id.hy_product -> - CallerDevaToolsManager.envConfigChange( - "0734", - DebugConfig.NET_MODE_RELEASE - ) + CallerDevaToolsManager.envConfigChange("0734", DebugConfig.NET_MODE_RELEASE) R.id.hy_qa -> CallerDevaToolsManager.envConfigChange("0734", DebugConfig.NET_MODE_QA) R.id.hy_demo -> - CallerDevaToolsManager.envConfigChange( - "0734", - DebugConfig.NET_MODE_DEMO - ) + CallerDevaToolsManager.envConfigChange("0734", DebugConfig.NET_MODE_DEMO) R.id.bj_product -> - CallerDevaToolsManager.envConfigChange( - "010", - DebugConfig.NET_MODE_RELEASE - ) + CallerDevaToolsManager.envConfigChange("010", DebugConfig.NET_MODE_RELEASE) R.id.bj_qa -> CallerDevaToolsManager.envConfigChange("010", DebugConfig.NET_MODE_QA) R.id.bj_demo -> @@ -1301,7 +1275,7 @@ internal class DebugSettingView @JvmOverloads constructor( * 设置是否输出高精地图日志 true-打印日志,false-不打印日志 */ tbHdMapLog.setOnCheckedChangeListener { _, isChecked -> - mogoMapData.get().setDebugMode(isChecked) + CallerMapUIServiceManager.getMapUIController()?.setDebugMode(isChecked) } cbTraceLog.isChecked = CallerDevaToolsManager.getTraceLogStatus() @@ -1407,34 +1381,19 @@ internal class DebugSettingView @JvmOverloads constructor( v.visibility = View.INVISIBLE logLoadingView?.visibility = View.VISIBLE v.scope.launch(Dispatchers.IO) { - val file = CallerDevaToolsManager.logcat()?.export() - if (file != null && file.exists()) { - withContext(Dispatchers.Main) { - var activity = AppStateManager.currentActivity() - while (activity == null) { - delay(2000) - activity = AppStateManager.currentActivity() - if (activity != null) { - break - } - } - activity?.startActivity(Intent.createChooser(Intent().also { - it.action = Intent.ACTION_SEND - it.type = "application/zip" - it.putExtra( - Intent.EXTRA_STREAM, - FileProvider.getUriForFile( - activity, - "${activity.packageName}.fileProvider", - file - ) - ) - }, "分享全量日志压缩包到")) - } - } else { - ToastUtils.showShort("全量日志压缩文件生成失败") + var isUploadSuccess = false + try { + CallerDevaToolsManager.logcat()?.upload() + isUploadSuccess = true + } catch (t: Throwable) { + t.printStackTrace() } withContext(Dispatchers.Main) { + if (isUploadSuccess) { + ToastUtils.showShort("上传成功") + } else { + ToastUtils.showShort("上传失败") + } logLoadingView?.visibility = View.INVISIBLE exportAllLogs?.visibility = View.VISIBLE } @@ -1598,10 +1557,8 @@ internal class DebugSettingView @JvmOverloads constructor( /** * 版本信息 */ - tvAppVersionName.text = - "鹰眼版本:${AppUtils.getAppVersionName()} Git Hash:${AppConfigInfo.workingBranchHash} \n渠道信息:${AppConfigInfo.flavor}" - tvAppVersionNameKey.text = - "鹰眼版本:${AppUtils.getAppVersionName()} Git Hash:${AppConfigInfo.workingBranchHash}\n渠道信息:${AppConfigInfo.flavor}" + tvAppVersionName.text = "鹰眼版本:${AppUtils.getAppVersionName()} Git Hash:${AppConfigInfo.workingBranchHash} \n渠道信息:${AppConfigInfo.flavor}" + tvAppVersionNameKey.text = "鹰眼版本:${AppUtils.getAppVersionName()} Git Hash:${AppConfigInfo.workingBranchHash}\n渠道信息:${AppConfigInfo.flavor}" tvAutopilotProtocolVersionInfo.text = "Autopilot协议版本:${CallerAutoPilotControlManager.getProtocolVersion()}" @@ -1618,12 +1575,9 @@ internal class DebugSettingView @JvmOverloads constructor( tvGitBranchInfo.text = "Git分支:${AppConfigInfo.workingBranchName}" tvAppBuildTimeInfo.text = "版本构建时间:${AppConfigInfo.appBuildTime}" - if (tbBeautyMode.isVisible) { - val version = ParseVersionUtils.parseVersion( - true, - CallerAutoPilotStatusListenerManager.getDockerVersion() - ) - if (version >= 30100 && AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { + if(tbBeautyMode.isVisible){ + val version = ParseVersionUtils.parseVersion(true, CallerAutoPilotStatusListenerManager.getDockerVersion()) + if(version >= 30100 && AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)){ tbBeautyMode.visibility = View.GONE } } @@ -1656,7 +1610,7 @@ internal class DebugSettingView @JvmOverloads constructor( "移动数据" } else { //WiFi - CommonUtils.getWifiName(context) ?: "" + CommonUtils.getWifiName(context)?:"" } } else { @@ -1731,14 +1685,11 @@ internal class DebugSettingView @JvmOverloads constructor( tvIpcInfo.text = it tvIpcInfoKey.text = it } - tvCmdbCarInfoContent.text = - SharedPrefsMgr.getInstance(context).getString(SharedPrefsConstants.CAR_INFO) ?: "" + tvCmdbCarInfoContent.text = SharedPrefsMgr.getInstance(context).getString(SharedPrefsConstants.CAR_INFO)?:"" //APP升级功能 - tvAppHost.text = "HOST地址:" + SharedPrefsMgr.getInstance(context) - .getString(SharedPrefsConstants.HOST_ADDRESS) ?: "" - tvAppContent.text = "APP升级数据:" + SharedPrefsMgr.getInstance(context) - .getString(SharedPrefsConstants.APP_UPGRADE_CONTENT) ?: "" + tvAppHost.text = "HOST地址:" + SharedPrefsMgr.getInstance(context).getString(SharedPrefsConstants.HOST_ADDRESS)?:"" + tvAppContent.text = "APP升级数据:" + SharedPrefsMgr.getInstance(context).getString(SharedPrefsConstants.APP_UPGRADE_CONTENT)?:"" tvCarInfo.text = "GPS时间:${(mGnssInfo?.satelliteTime?.times(1000))?.toLong()}\n" + @@ -1776,7 +1727,7 @@ internal class DebugSettingView @JvmOverloads constructor( tbIsDemoMode?.text = "开启美化模式" } - if (FunctionBuildConfig.isRainMode) { + if(FunctionBuildConfig.isRainMode){ tbIsRainMode?.text = "关闭雨天模式" } else { tbIsRainMode?.text = "开启雨天模式" @@ -2163,71 +2114,56 @@ internal class DebugSettingView @JvmOverloads constructor( } private fun restartApp() { - Utils.getApp() - .startActivity(Utils.getApp().packageManager.getLaunchIntentForPackage(Utils.getApp().packageName)) + Utils.getApp().startActivity(Utils.getApp().packageManager.getLaunchIntentForPackage(Utils.getApp().packageName)) Process.killProcess(Process.myPid()) } private fun cacheHDOfflineData(isGaoDe: Boolean) { + var progss = 0 if (isGaoDe) {// 拿到了高德地图的cityCode - mogoMapData.get().cacheHDDataByCity({ _, progress -> - if (Thread.currentThread() != Looper.getMainLooper().thread) { - ThreadUtils.runOnUiThread(Runnable { - cacheHDCityProgressUpdate(progress) - }, ThreadUtils.MODE.QUEUE) - } else { - cacheHDCityProgressUpdate(progress) + CallerMapUIServiceManager.cacheHDDataByCity(object : IHdCacheListener { + override fun onMapHdCacheProgress(cityId: Int, progress: Double) { + // 更新进度 + progss = progress.toInt() + if (progss == 100) { + isHDCached = true + btn_cache_hd_map.text = "缓存高精离线地图(已是最新版!)" + } else { + btn_cache_hd_map.text = "缓存高精离线地图(进度:${progss}%)" + } } - }, { _, state -> - if (Thread.currentThread() != Looper.getMainLooper().thread) { - ThreadUtils.runOnUiThread(Runnable { - cacheHDCityResult(state) - }, ThreadUtils.MODE.QUEUE) - } else { - cacheHDCityResult(state) + + override fun onMapHdCacheResult(cityId: Int, state: Int) { + if (state == 0) {// 失败 + btn_cache_hd_map.text = "缓存高精离线地图(下载失败!)" + ToastUtils.showShort("下载失败,请重试!") + } } }) } else {// 只拿到了高精的经纬度 mGnssInfo?.let { loc -> - mogoMapData.get().cacheHDDataByCityByLonLat(loc, { _, progress -> - if (Thread.currentThread() != Looper.getMainLooper().thread) { - ThreadUtils.runOnUiThread(Runnable { - cacheHDCityProgressUpdate(progress) - }, ThreadUtils.MODE.QUEUE) - } else { - cacheHDCityProgressUpdate(progress) + CallerMapUIServiceManager.cacheHDDataByCityByLonLat(object : IHdCacheListener { + override fun onMapHdCacheProgress(cityId: Int, progress: Double) { + progss = progress.toInt() + if (progss == 100) { + isHDCached = true + btn_cache_hd_map.text = "缓存高精离线地图(已是最新版!)" + } else { + btn_cache_hd_map.text = "缓存高精离线地图(进度:${progss}%)" + } } - }, { _, state -> - if (Thread.currentThread() != Looper.getMainLooper().thread) { - ThreadUtils.runOnUiThread(Runnable { - cacheHDCityResult(state) - }, ThreadUtils.MODE.QUEUE) - } else { - cacheHDCityResult(state) + + override fun onMapHdCacheResult(cityId: Int, state: Int) { + if (state == 0) {// 失败 + btn_cache_hd_map.text = "缓存高精离线地图(下载失败!)" + ToastUtils.showShort("下载失败,请重试!") + } } - }) + }, loc) } } } - private fun cacheHDCityProgressUpdate(progress: Double) { - // 更新进度 - val progss = progress.toInt() - if (progss == 100) { - isHDCached = true - btn_cache_hd_map.text = "缓存高精离线地图(已是最新版!)" - } else { - btn_cache_hd_map.text = "缓存高精离线地图(进度:${progss}%)" - } - } - - private fun cacheHDCityResult(state: Int) { - if (state == 0) {// 失败 - btn_cache_hd_map.text = "缓存高精离线地图(下载失败!)" - ToastUtils.showShort("下载失败,请重试!") - } - } - override fun fwThreadClose() { refreshTraceInfo() } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml index c377837ecb..52650e45ff 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml @@ -2246,7 +2246,7 @@ android:layout_gravity="center"> diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/logcat/IMoGoLogRecordProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/logcat/IMoGoLogRecordProvider.kt index 7d3a906462..8b1956a9fd 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/logcat/IMoGoLogRecordProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/logcat/IMoGoLogRecordProvider.kt @@ -13,6 +13,8 @@ interface IMoGoLogRecordProvider { fun export(): File? + fun upload() + fun testJavaCrash(runOnNewThread: Boolean) fun testNativeCrash(runOnNewThread: Boolean)