[6.3.0][调试面板] 在调试面板增加主动上传Vlog的UI入口

This commit is contained in:
renwj
2024-03-15 19:07:09 +08:00
parent 63b42ab5e7
commit 9f0b836c57
3 changed files with 148 additions and 2 deletions

View File

@@ -38,7 +38,7 @@ buildscript {
classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.15.0"
classpath 'com.mogo.cloud:matrix:1.0.2'
classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.4.0.2513'
classpath 'com.mogo.eagle.core.handler.proxy:plugin:10.0.0'
classpath 'com.mogo.eagle.core.handler.proxy:plugin:10.0.10'
classpath 'com.gradle:gradle-enterprise-gradle-plugin:3.15.1'
// classpath 'com.bytedance.btrace:rhea-gradle-plugin:2.0.0'
}

View File

@@ -7,6 +7,7 @@ import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Build
import android.os.Process
import android.text.Html
@@ -14,7 +15,11 @@ import android.util.AttributeSet
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.TextView
import androidx.annotation.RequiresApi
import androidx.appcompat.widget.ListPopupWindow
import androidx.appcompat.widget.PopupMenu
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
@@ -22,6 +27,7 @@ import androidx.core.view.MenuCompat
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import chassis.Chassis
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.cloud.network.cronet.NetworkQualityListener
import com.mogo.cloud.network.cronet.QuicConfig
import com.mogo.cloud.passport.MoGoAiCloudClient
@@ -33,6 +39,7 @@ import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.data.app.AppConfigInfo
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.constants.MoGoConfig
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BAG_RECORD
@@ -91,6 +98,8 @@ import com.mogo.eagle.core.utilcode.util.*
import com.mogo.map.MogoData.Companion.mogoMapData
import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.map.uicontroller.VisualAngleMode.*
import com.mogo.test.crashreport.CrashReportConstants
import com.mogo.test.crashreport.ITestCrashReportProvider
import com.zhjt.mogo.adas.data.AdasConstants
import com.zhjt.service.chain.ChainLog
import kotlinx.android.synthetic.main.view_debug_setting.view.*
@@ -99,6 +108,7 @@ import mogo.telematics.pad.MessagePad
import mogo_msg.MogoReportMsg
import java.text.SimpleDateFormat
import java.util.*
import java.util.concurrent.TimeUnit
import kotlin.collections.component1
import kotlin.collections.component2
import kotlin.collections.component3
@@ -1564,7 +1574,7 @@ internal class DebugSettingView @JvmOverloads constructor(
}
}
//导出全量日志
//上传全量日志
exportAllLogs?.onClick { v ->
v.visibility = View.INVISIBLE
logLoadingView?.visibility = View.VISIBLE
@@ -1588,6 +1598,47 @@ internal class DebugSettingView @JvmOverloads constructor(
}
}
if (JunkConfig.isSupportJunkDetect) {
// 上传APM日志
upload_apm_log_group?.visibility = View.VISIBLE
upload_apm_log?.onClick { v ->
ListPopupWindow(v.context).also { p ->
val items = ApmVLogUploadDuration.values()
p.setAdapter(ApmVLogUploadAdapter(v.context, items))
p.anchorView = v
p.isModal = true
p.setBackgroundDrawable(ColorDrawable(Color.WHITE))
p.setOnItemClickListener { _, _, position, _ ->
val provider = (ARouter.getInstance().build(CrashReportConstants.PATH).navigation() as? ITestCrashReportProvider) ?: return@setOnItemClickListener
val item = items[position]
v.visibility = View.INVISIBLE
upload_apm_log_loading?.visibility = View.VISIBLE
p.dismiss()
v.scope.launch(Dispatchers.IO) {
val endTime = System.currentTimeMillis()
val startTime = when(item) {
ApmVLogUploadDuration.IN_15M -> endTime - TimeUnit.MINUTES.toMillis(15)
ApmVLogUploadDuration.IN_45M -> endTime - TimeUnit.MINUTES.toMillis(45)
ApmVLogUploadDuration.IN_1H -> endTime - TimeUnit.HOURS.toMillis(1)
ApmVLogUploadDuration.IN_2H -> endTime - TimeUnit.HOURS.toMillis(2)
ApmVLogUploadDuration.IN_3H -> endTime - TimeUnit.HOURS.toMillis(3)
ApmVLogUploadDuration.IN_6H -> endTime - TimeUnit.HOURS.toMillis(6)
ApmVLogUploadDuration.ALL -> 0
}
provider.uploadVlog(startTime, endTime)
withContext(Dispatchers.Main) {
ToastUtils.showShort("上传成功")
upload_apm_log_loading?.visibility = View.INVISIBLE
upload_apm_log?.visibility = View.VISIBLE
}
}
}
}.show()
}
} else {
upload_apm_log_group?.visibility = View.GONE
}
/**
* 展示、关闭日志过滤面板
*/
@@ -1680,6 +1731,53 @@ internal class DebugSettingView @JvmOverloads constructor(
}
}
private enum class ApmVLogUploadDuration(val text: String) {
IN_15M("15分钟内"),
IN_45M("45分钟内"),
IN_1H("1小时内"),
IN_2H("2小时内"),
IN_3H("3小时内"),
IN_6H("6小时内"),
ALL("上传所有")
}
private class ApmVLogUploadAdapter(private val ctx: Context, private val items: Array<ApmVLogUploadDuration>): BaseAdapter() {
override fun getCount(): Int {
return items.size
}
override fun getItem(position: Int): Any {
return items[position]
}
override fun getItemId(position: Int): Long {
return items[position].ordinal.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var result = convertView
val duration = items[position]
if (result == null) {
val temp = View.inflate(ctx, android.R.layout.simple_list_item_1, null)
temp.tag = Holder(temp.findViewById(android.R.id.text1))
result = temp
}
val holder = result?.tag as? Holder
if (holder != null) {
holder.text?.setTextColor(Color.BLACK)
holder.text?.text = duration.text
} else {
val text = result?.findViewById<TextView>(android.R.id.text1)
text?.setTextColor(Color.BLACK)
text?.text = duration.text
result?.tag = Holder(text)
}
return result!!
}
private inner class Holder(val text: TextView? = null)
}
private fun refreshTraceInfo() {
val traceInfoMap = CallerDevaToolsManager.getTraceInfo()
val autopilot = traceInfoMap[ChainConstant.CHAIN_TYPE_SOCKET_AUTOPILOT]

View File

@@ -2341,6 +2341,54 @@
android:text="上传全量日志"
android:gravity="center"
android:layout_marginTop="10dip"
android:layout_marginBottom="10dipis" />
</FrameLayout>
<FrameLayout
android:id="@+id/upload_apm_log_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_mf_sop_operator"
android:paddingBottom="10dip"
android:layout_marginStart="10dip"
android:layout_marginEnd="10dip"
android:layout_marginTop="10dip"
android:visibility="gone"
tools:visibility="visible"
android:paddingTop="10dip">
<LinearLayout
android:id="@+id/upload_apm_log_loading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:visibility="invisible"
android:layout_gravity="center">
<TextView
android:text="正在上传,请稍侯..."
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="20dip"/>
<ProgressBar
style="?android:attr/progressBarStyleSmall"
android:layout_width="30dip"
android:layout_height="30dip"
android:layout_marginStart="10dip"/>
</LinearLayout>
<TextView
android:id="@+id/upload_apm_log"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="20dip"
android:text="上传APM(VLog)日志"
android:gravity="center"
android:layout_marginTop="10dip"
android:layout_marginBottom="10dip" />
</FrameLayout>