[6.0.0][全量日志] 全量日志添加状态记录,日志中心由【导出全量日志】改为【上传全量日志】

This commit is contained in:
renwj
2023-08-28 19:47:08 +08:00
committed by zhongchao
parent 0eb8e1785b
commit 7427782eda
6 changed files with 174 additions and 163 deletions

View File

@@ -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()
}

View File

@@ -2246,7 +2246,7 @@
android:layout_gravity="center">
<TextView
android:text="正在压缩全量日志,请稍候"
android:text="正在上传,请稍侯..."
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
@@ -2265,7 +2265,7 @@
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="20dip"
android:text="导出全量日志"
android:text="上传全量日志"
android:gravity="center"
android:layout_marginTop="10dip"
android:layout_marginBottom="10dip" />