[6.3.0][调试面板] 在调试面板增加主动上传Vlog的UI入口
This commit is contained in:
@@ -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'
|
||||
}
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user