[6.2.0]录包工具被动录包修改

This commit is contained in:
xuxinchao
2023-11-16 18:33:02 +08:00
parent 71aa655267
commit 1e50bc7f8c
2 changed files with 137 additions and 47 deletions

View File

@@ -10,10 +10,14 @@ import android.os.Handler
import android.util.DisplayMetrics
import android.util.Log
import android.view.*
import android.view.animation.Animation
import android.view.animation.ScaleAnimation
import android.widget.CheckBox
import android.widget.CompoundButton
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.flexbox.FlexboxLayout
import com.iflytek.cloud.ErrorCode
import com.iflytek.cloud.InitListener
@@ -25,10 +29,13 @@ import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.deva.badcase.BagDescriptionEntity
import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity
import com.mogo.eagle.core.data.deva.badcase.RecordOptionEntity
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.RecordBagMsg
import com.mogo.eagle.core.function.api.devatools.badcase.BadCaseNetListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsNetManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
@@ -46,11 +53,16 @@ import kotlinx.coroutines.launch
import com.zhidao.loglib.upload.UploadManager
import com.zhidao.loglib.util.FileUtil
import com.zhjt.mogo_core_function_devatools.badcase.BadCaseAnalyticsManager
import com.zhjt.mogo_core_function_devatools.badcase.biz.adapter.BadReasonListAdapter
import com.zhjt.mogo_core_function_devatools.badcase.repository.net.api.BadCaseNetManager
import com.zhjt.mogo_core_function_devatools.badcase.repository.store.BadCaseReasonStore
import me.jessyan.autosize.utils.AutoSizeUtils
import org.greenrobot.eventbus.EventBus
import org.json.JSONArray
import org.json.JSONException
import org.json.JSONObject
import java.io.File
import java.lang.StringBuilder
/**
* @author XuXinChao
@@ -58,7 +70,7 @@ import java.io.File
* @since: 2022/7/17
*/
class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListener,
CompoundButton.OnCheckedChangeListener {
BadCaseNetListener {
companion object {
const val TAG = "PassiveBadCaseWindow"
@@ -74,13 +86,16 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
private var bagManagerEntity: BagManagerEntity = BagManagerEntity()
private var uploadReason: String = String() //上报原因,标签
private var uploadReason: StringBuilder = StringBuilder() //上报原因,标签
private var recordKey: String?=null //录制bag包key
private var recordFileName: String?=null //录制文件包名
private var receiveTime: String ?= null //接收时间
private var stat: String = ""
private var boxBean: MsgBoxBean ?= null
private lateinit var rvPassiveList : RecyclerView
private var badReasonListAdapter: BadReasonListAdapter?= null
private var mInViewX = 0f
private var mInViewY = 0f
private var mDownInScreenX = 0f
@@ -95,6 +110,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
private lateinit var tvPassiveTime: TextView
private lateinit var tvPassiveIdentity: TextView
private lateinit var viewAudioBg: ImageView
private lateinit var viewAudioButton: ImageView
private lateinit var tvAudioCountDown: TextView
@@ -131,10 +147,34 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
tvPassiveNum = mFloatLayout.findViewById(R.id.tvPassiveNum)
tvPassiveTime = mFloatLayout.findViewById(R.id.tvPassiveTime)
tvPassiveIdentity = mFloatLayout.findViewById(R.id.tvPassiveIdentity)
viewAudioBg = mFloatLayout.findViewById(R.id.viewAudioBg)
viewAudioButton = mFloatLayout.findViewById(R.id.viewAudioButton)
tvAudioCountDown = mFloatLayout.findViewById(R.id.tvAudioCountDown)
tvPassiveReport = mFloatLayout.findViewById(R.id.tvPassiveReport)
tvPassiveCancel = mFloatLayout.findViewById(R.id.tvPassiveCancel)
rvPassiveList = mFloatLayout.findViewById(R.id.rvPassiveList)
val linearLayoutManager = LinearLayoutManager(mActivity)
linearLayoutManager.orientation = LinearLayoutManager.VERTICAL
rvPassiveList.layoutManager = linearLayoutManager
badReasonListAdapter = BadReasonListAdapter(mActivity)
badReasonListAdapter?.setListener(object: BadReasonListAdapter.ReasonClickListener{
override fun onClick(reason: String, isChecked: Boolean) {
if(isChecked){
uploadReason.append(reason)
}else{
val index = uploadReason.indexOf(reason)
uploadReason.delete(index,index+reason.length)
}
}
})
rvPassiveList.adapter = badReasonListAdapter
/**
* 获取录包原因数据
*/
// BadCaseNetManager.badCaseNetManager.getRecordOption(1,AppConfigInfo.iPCMacAddress)
BadCaseNetManager.badCaseNetManager.getRecordOption(2,"48:b0:2d:3a:9c:8f")
CallerDevaToolsNetManager.addListener(this.hashCode().toString(),this)
if(BadCaseConfig.windowNum<1){
BadCaseConfig.windowNum = 1
}
@@ -142,7 +182,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
BadCaseConfig.windowNum++
tvPassiveTime.text = "时间:${millis2String(System.currentTimeMillis(),TimeUtils.getHourMinSecondFormat())}"
tvPassiveIdentity.text = "身份:${BadCaseConfig.identity}"
viewAudioButton.setOnClickListener {
viewAudioBg.setOnClickListener {
audioStatus = !audioStatus
setAudio(audioStatus)
}
@@ -272,8 +312,15 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
}
audioFileName = "Audio_${System.currentTimeMillis()}_BadCase"
RecordManager.getInstance().start(audioFileName)
//更改录音按钮背景
viewAudioButton.setImageResource(R.drawable.icon_bad_case_audio_select)
//开始录音,展示放大缩小动效
val scaleAnimation = ScaleAnimation(
1.0f, 0.9f, 1.0f, 0.9f,
Animation.RELATIVE_TO_SELF, 0.9f, Animation.RELATIVE_TO_SELF, 0.9f
)
scaleAnimation.duration = 1000
scaleAnimation.repeatCount = -1
viewAudioButton.startAnimation(scaleAnimation)
tvAudioCountDown.visibility = View.VISIBLE
//开始倒计时
if(countDownTimer==null){
@@ -287,9 +334,8 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
tvAudioCountDown.visibility = View.GONE
//结束录音
RecordManager.getInstance().stop()
//更改录音按钮背景
//TODO
// viewAudioButton.setImageResource(R.drawable.icon_bad_case_audio_normal)
//结束动画
viewAudioButton.clearAnimation()
}
}
countDownTimer?.start()
@@ -361,7 +407,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
itx["filesize"] = "0" //bag包文件大小
itx["key"] = recordKey?:"" //key
if(reasonDetail.isNullOrEmpty()){
itx["reason"] = uploadReason
itx["reason"] = uploadReason.toString()
}else{
itx["reason"] = "$uploadReason 语音内容:$reasonDetail" //采集原因
}
@@ -383,7 +429,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
//将上报BI的结果同步给工控机记录保存
recordKey?.let {
val hasAudio = downloadUrl != null
val descReqEntity = BagDescriptionEntity(uploadReason,hasAudio,downloadUrl.toString(),true)
val descReqEntity = BagDescriptionEntity(uploadReason.toString(),hasAudio,downloadUrl.toString(),true)
bagManagerEntity.reqType = 5
bagManagerEntity.keyReq = it.toLong()
bagManagerEntity.descReq = descReqEntity
@@ -394,7 +440,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
BadCaseAnalyticsManager.bagRecordUpload(recordKey?:"",recordFileName?:"",receiveTime?:System.currentTimeMillis().toString(),
stat,AppConfigInfo.plateNumber,BadCaseConfig.totalDuration.toString(),MoGoAiCloudClientConfig.getInstance().sn,
BadCaseConfig.dockerVersion ?:"",AppUtils.getAppVersionName(),loc.latitude.toString(),loc.longitude.toString(),
BadCaseConfig.identity,downloadUrl?:"",uploadReason,System.currentTimeMillis().toString(),"0")
BadCaseConfig.identity,downloadUrl?:"",uploadReason.toString(),System.currentTimeMillis().toString(),"0")
//日志
CallerLogger.i("$M_DEVA$TAG", "BadCase Passive Analytics="+"key="+recordKey+" filename="+recordFileName+
" receiveTime="+receiveTime+" stat="+"100"+" plateNumber="+AppConfigInfo.plateNumber+
@@ -445,30 +491,18 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
val metrics = DisplayMetrics()
// 默认固定位置,靠屏幕右边缘的中间
mWindowManager!!.defaultDisplay.getMetrics(metrics)
mWindowParams!!.x = metrics.widthPixels
// mWindowParams!!.x = metrics.widthPixels
mWindowParams!!.x = 0
mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-950
mWindowManager!!.addView(mFloatLayout, mWindowParams)
}
}
override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) {
buttonView?.text?.let {
if(isChecked){
if(!uploadReason.contains(it)){
uploadReason += it
}
}else{
if(uploadReason.contains(it)){
uploadReason = uploadReason.replace(it.toString(),"")
}
}
}
}
fun hideFloatWindow() {
//注销采集原因回调监听
CallerDevaToolsNetManager.removeListener(this.hashCode().toString())
// 移除 ADAS车辆状态&定位 监听
if (mFloatLayout.parent != null) mWindowManager!!.removeView(mFloatLayout)
}
@@ -490,4 +524,47 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
fun closeWindow()
}
override fun onPassiveResponse(list: List<RecordOptionEntity>) {
if(list.isNotEmpty()){
badReasonListAdapter?.setData(list)
}
}
override fun onPassiveError() {
if(BadCaseReasonStore.getPassiveDataRecord().isNotEmpty()){
val list = ArrayList<RecordOptionEntity>()
val result = JSONArray(BadCaseReasonStore.getPassiveDataRecord())
if(result.length() > 0){
for(i in 0 until result.length()){
val entity = RecordOptionEntity()
val jsonObject = result[i] as JSONObject
val optionName = jsonObject.optString("optionName")
entity.optionName = optionName
val optionCode = jsonObject.optString("optionCode")
entity.optionCode = optionCode
val children = jsonObject.optJSONArray("children")
if (children != null) {
if(children.length() > 0){
for(index in 0 until children.length()){
val childJson = children[index] as JSONObject
val child = RecordOptionEntity()
val childOptionNme = childJson.optString("optionName")
val childOptionCode = childJson.optString("optionCode")
child.optionName = childOptionNme
child.optionCode = childOptionCode
entity.children.add(child)
}
}
}
list.add(entity)
}
}
if(list.isNotEmpty()){
badReasonListAdapter?.setData(list)
}
}else{
ToastUtils.showShort("被动录包数据采集错误且无缓存数据可用")
}
}
}

View File

@@ -2,26 +2,26 @@
<com.mogo.eagle.core.widget.RoundConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="924dp"
android:layout_height="668dp"
app:roundLayoutRadius="40dp"
android:layout_width="@dimen/dp_859"
android:layout_height="@dimen/dp_850"
app:roundLayoutRadius="@dimen/dp_36"
android:background="#1B2966">
<View
android:layout_width="match_parent"
android:layout_height="113dp"
android:layout_height="@dimen/dp_102"
android:background="@drawable/ai_collect_title_bg"
/>
<TextView
android:id="@+id/tvPassiveNum"
android:layout_width="120dp"
android:layout_height="113dp"
android:layout_width="@dimen/dp_108"
android:layout_height="@dimen/dp_102"
android:background="@drawable/icon_num_bg"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:textColor="#FFFFFFFF"
android:textSize="46dp"
android:textSize="@dimen/sp_42"
android:gravity="center"
android:text="1"
/>
@@ -34,7 +34,7 @@
app:layout_constraintTop_toTopOf="@id/tvPassiveNum"
app:layout_constraintBottom_toBottomOf="@id/tvPassiveNum"
android:textColor="#FFFFFFFF"
android:textSize="38dp"
android:textSize="@dimen/sp_34"
android:layout_marginStart="@dimen/dp_50"
/>
@@ -46,35 +46,48 @@
app:layout_constraintBottom_toBottomOf="@id/tvPassiveNum"
app:layout_constraintRight_toRightOf="parent"
android:textColor="#FFFFFFFF"
android:textSize="38dp"
android:textSize="@dimen/sp_34"
android:layout_marginEnd="@dimen/dp_50"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvPassiveList"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvPassiveNum"
app:layout_constraintBottom_toTopOf="@id/viewAudioBg"
android:scrollbars="vertical"
android:fadeScrollbars="false"
android:layout_margin="@dimen/dp_20"
/>
<TextView
android:id="@+id/tvPassiveReport"
android:layout_width="270dp"
android:layout_height="70dp"
android:layout_width="@dimen/dp_370"
android:layout_height="@dimen/dp_80"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toLeftOf="@id/tvPassiveCancel"
android:background="@drawable/report_button_bg"
android:text="上报"
android:textColor="#FFFFFF"
android:textSize="30dp"
android:textSize="@dimen/dp_27"
android:gravity="center"
android:layout_marginBottom="@dimen/dp_40"
/>
<TextView
android:id="@+id/tvPassiveCancel"
android:layout_width="270dp"
android:layout_height="70dp"
android:layout_width="@dimen/dp_370"
android:layout_height="@dimen/dp_80"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toRightOf="@id/tvPassiveReport"
android:text="取消"
android:textColor="#FFFFFF"
android:textSize="30dp"
android:textSize="@dimen/dp_27"
android:gravity="center"
android:background="@drawable/icon_cancel_bg"
android:layout_marginBottom="@dimen/dp_40"
@@ -82,8 +95,8 @@
<ImageView
android:id="@+id/viewAudioBg"
android:layout_width="824dp"
android:layout_height="174dp"
android:layout_width="@dimen/dp_768"
android:layout_height="@dimen/dp_122"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toTopOf="@id/tvPassiveReport"
@@ -93,8 +106,8 @@
<ImageView
android:id="@+id/viewAudioButton"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_width="@dimen/dp_34"
android:layout_height="@dimen/dp_48"
app:layout_constraintLeft_toLeftOf="@id/viewAudioBg"
app:layout_constraintRight_toRightOf="@id/viewAudioBg"
app:layout_constraintTop_toTopOf="@id/viewAudioBg"
@@ -107,7 +120,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFFFF"
android:textSize="30dp"
android:textSize="@dimen/dp_27"
app:layout_constraintTop_toTopOf="@id/viewAudioButton"
app:layout_constraintBottom_toBottomOf="@id/viewAudioButton"
app:layout_constraintLeft_toRightOf="@id/viewAudioButton"