BadCase自定义录包

This commit is contained in:
xuxinchao
2022-10-27 14:49:21 +08:00
parent 8c38ef7cd6
commit 3d4530a1ca
10 changed files with 108 additions and 49 deletions

View File

@@ -107,13 +107,8 @@ internal object BadCaseManager : LifecycleEventObserver {
if(ClickUtils.isFastClick()){
if(NetworkUtils.isConnected()){
if(BadCaseConfig.dockerVersion!=null){
val initiativeBadCaseWindow = InitiativeBadCaseWindow(activity)
initiativeBadCaseWindow.setClickListener(object: InitiativeBadCaseWindow.ClickListener{
override fun closeWindow() {
initiativeBadCaseWindow.hideFloatWindow()
}
})
initiativeBadCaseWindow.showFloatWindow()
val caseListDialog = CaseListDialog(activity)
caseListDialog.show()
}else{
ToastUtils.showShort("工控机连接状态异常")
}

View File

@@ -5,6 +5,7 @@ import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.GridLayoutManager
import com.mogo.eagle.core.data.badcase.RecordTypeEntity
@@ -157,20 +158,7 @@ internal class BadCaseConfigView @JvmOverloads constructor(
val gridLayoutManager = GridLayoutManager(context,2)
rvTemplate.layoutManager = gridLayoutManager
rvTemplate.adapter = recordTemplateAdapter
// val list = ArrayList<TopicEntity>()
// list.add(TopicEntity("/v2n/aicloud/rsm_info",false,false))
// list.add(TopicEntity("/autopilot_info/report_msg_error",false,false))
// list.add(TopicEntity("/v2n/aicloud/rsi_info",false,false))
// list.add(TopicEntity("/record_cache/task",false,true))
// list.add(TopicEntity("/sensor/rainmode",false,true))
// list.add(TopicEntity("/record_cache/master/task",false,true))
// list.add(TopicEntity("/telematics/trip_info_event",false,true))
// list.add(TopicEntity("/telematics/light",false,true))
// list.add(TopicEntity("/guardian/aicloud_state",false,true))
// recordTypesList.add(RecordTypeEntity(1,"红路灯",list))
// recordTemplateAdapter?.setData(recordTypesList)
// recordTemplateAdapter?.notifyDataSetChanged()
rvTemplate.visibility = View.GONE
}
fun setClickListener(clickListener: ClickListener) {
@@ -196,6 +184,7 @@ internal class BadCaseConfigView @JvmOverloads constructor(
}
}
if(recordTypesList.size>1){
rvTemplate.visibility = View.VISIBLE
recordTemplateAdapter?.setData(recordTypesList)
recordTemplateAdapter?.notifyDataSetChanged()
}

View File

@@ -1,33 +1,44 @@
package com.zhjt.mogo_core_function_devatools.badcase.biz;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.mogo.eagle.core.data.badcase.RecordCaseEntity;
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener;
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager;
import com.mogo.eagle.core.utilcode.util.ThreadUtils;
import com.zhjt.mogo_core_function_devatools.R;
import com.zhjt.mogo_core_function_devatools.badcase.biz.adapter.CaseListAdapter;
import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig;
import java.util.ArrayList;
import mogo.telematics.pad.MessagePad;
import record_cache.RecordPanelOuterClass;
/**
* @author XuXinChao
* @description BadCase清单选择对话框
* @since: 2022/10/19
*/
public class CaseListDialog extends Dialog {
public class CaseListDialog extends Dialog implements IMoGoAutopilotRecordListener {
private TextView tvCancel;
private RecyclerView rvCaseList;
private CaseListAdapter caseListAdapter;
private static final String TAG = "CaseListDialog";
private ArrayList<RecordCaseEntity> recordTypeEntityArrayList = new ArrayList<>();
private Activity activity;
public CaseListDialog(@NonNull Context context) {
super(context, R.style.bad_case_dialog);
public CaseListDialog(@NonNull Activity activity) {
super(activity, R.style.bad_case_dialog);
this.activity = activity;
}
@Override
@@ -43,21 +54,60 @@ public class CaseListDialog extends Dialog {
tvCancel = findViewById(R.id.tvCancel);
rvCaseList = findViewById(R.id.rvCaseList);
caseListAdapter = new CaseListAdapter();
caseListAdapter.setListener(recordCaseEntity -> {
//录制Bag包弹窗
InitiativeBadCaseWindow initiativeBadCaseWindow = new InitiativeBadCaseWindow(activity);
initiativeBadCaseWindow.setClickListener(initiativeBadCaseWindow::hideFloatWindow);
initiativeBadCaseWindow.showFloatWindow(recordCaseEntity);
});
GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(),2);
gridLayoutManager.setOrientation(RecyclerView.VERTICAL);
rvCaseList.setLayoutManager(gridLayoutManager);
rvCaseList.setAdapter(caseListAdapter);
ArrayList<String> list = new ArrayList<>();
list.add("红绿灯检测错误");
list.add("接管默认录制");
list.add("行程冲突");
list.add("自定义A");
caseListAdapter.setData(list);
caseListAdapter.notifyDataSetChanged();
}
private void initEvent() {
tvCancel.setOnClickListener(v -> dismiss());
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
CallerAutopilotRecordListenerManager.INSTANCE.addListener(TAG, this);
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
CallerAutopilotRecordListenerManager.INSTANCE.removeListener(TAG);
}
@Override
public void onAutopilotRecordResult(@NonNull RecordPanelOuterClass.RecordPanel recordPanel) {
}
@Override
public void onAutopilotRecordConfig(@NonNull MessagePad.RecordDataConfig config) {
ThreadUtils.runOnUiThread(() -> {
if(config.getRecordTypesCount()>0){
for(int index=0;index<config.getRecordTypesCount();index++){
ArrayList<String> topicList = new ArrayList<>();
for(int position=0;position<config.getRecordTypesCount();position++){
topicList.add(config.getRecordTypes(index).getTopicsList().get(position));
}
recordTypeEntityArrayList.add(new RecordCaseEntity(
config.getRecordTypes(index).getId(),config.getRecordTypes(index).getDesc(),
topicList));
}
}
if(BadCaseConfig.customTopicList.size()>0){
recordTypeEntityArrayList.add(new RecordCaseEntity(0,"自定义A",BadCaseConfig.customTopicList));
}
caseListAdapter.setData(recordTypeEntityArrayList);
caseListAdapter.notifyDataSetChanged();
});
}
}

View File

@@ -25,6 +25,7 @@ import com.mogo.eagle.core.utilcode.util.ThreadUtils;
import com.mogo.eagle.core.utilcode.util.ToastUtils;
import com.zhjt.mogo_core_function_devatools.R;
import com.zhjt.mogo_core_function_devatools.badcase.biz.adapter.TopicListAdapter;
import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig;
import java.util.ArrayList;
import java.util.List;
@@ -162,6 +163,11 @@ public class CaseTopicListDialog extends Dialog implements IMoGoAutopilotRecordL
Boolean success=CallerAutoPilotManager.INSTANCE.getBadCaseConfig(2,recordType.getId(),addTopicList);
if(Boolean.TRUE.equals(success)){
ToastUtils.showShort("Topic设置成功");
if(recordType.getId() == 0){
//自定义Topic
BadCaseConfig.customTopicList.addAll(addTopicList);
}
addTopicList.clear();
dismiss();
}else{
ToastUtils.showShort("Topic设置失败");

View File

@@ -13,6 +13,7 @@ import android.widget.ImageView
import android.widget.TextView
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.badcase.RecordCaseEntity
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarStateListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager
@@ -137,13 +138,6 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
CallerAutopilotRecordListenerManager.addListener(this.hashCode().toString(),this)
// 添加 ADAS车辆状态&定位 监听
CallerAutopilotCarStatusListenerManager.addListener(this.hashCode().toString(), this)
//开启录包
CallerAutoPilotManager.recordPackage(BadCaseConfig.type,
Random(SystemClock.elapsedRealtime()).nextInt(),
BadCaseConfig.totalDuration,
BadCaseConfig.previousDuration
)
viewAudioButton.setOnClickListener {
audioStatus = !audioStatus
setAudio(audioStatus)
@@ -337,7 +331,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
return true
}
fun showFloatWindow() {
fun showFloatWindow(recordCaseEntity: RecordCaseEntity) {
if (mFloatLayout.parent == null) {
val metrics = DisplayMetrics()
// 默认固定位置,靠屏幕右边缘的中间
@@ -345,6 +339,9 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
mWindowParams!!.x = metrics.widthPixels
mWindowParams!!.y = metrics.heightPixels / 2 - getSysBarHeight(mActivity)-350
mWindowManager!!.addView(mFloatLayout, mWindowParams)
//开启录包
CallerAutoPilotManager.recordPackage(recordCaseEntity.caseId,Random(SystemClock.elapsedRealtime()).nextInt(),
BadCaseConfig.totalDuration, BadCaseConfig.previousDuration,recordCaseEntity.topicList)
}
}

View File

@@ -5,6 +5,7 @@ import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.mogo.eagle.core.data.badcase.RecordCaseEntity
import com.zhjt.mogo_core_function_devatools.R
/**
@@ -14,12 +15,17 @@ import com.zhjt.mogo_core_function_devatools.R
*/
class CaseListAdapter: RecyclerView.Adapter<CaseListAdapter.CaseListHolder>() {
private var data:List<String>? = null
private var data:List<RecordCaseEntity>? = null
private var caseClickListener: CaseClickListener?=null
fun setData( data: List<String>?){
fun setData( data: List<RecordCaseEntity>?){
this.data = data
}
fun setListener(listener: CaseClickListener){
caseClickListener = listener
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CaseListHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_case_list, parent, false)
@@ -27,10 +33,10 @@ class CaseListAdapter: RecyclerView.Adapter<CaseListAdapter.CaseListHolder>() {
}
override fun onBindViewHolder(holder: CaseListHolder, position: Int) {
data?.let {
holder.caseName.text = it[position]
data?.let {recordCaseEntity->
holder.caseName.text = recordCaseEntity[position].caseName
holder.caseName.setOnClickListener {
caseClickListener?.onClick(recordCaseEntity[position])
}
}
}
@@ -40,4 +46,9 @@ class CaseListAdapter: RecyclerView.Adapter<CaseListAdapter.CaseListHolder>() {
class CaseListHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
var caseName: TextView = itemView.findViewById(R.id.caseName)
}
interface CaseClickListener{
fun onClick(recordCaseEntity: RecordCaseEntity)
}
}

View File

@@ -27,7 +27,10 @@ object BadCaseConfig {
//工控机版本
@JvmField
var dockerVersion:String ?= null
@JvmField
var recordKeyList:ArrayList<Long> = ArrayList()
//自定义Topic清单列表
@JvmField
var customTopicList: ArrayList<String> = ArrayList()
}

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/caseName"
android:layout_width="430px"
android:layout_width="match_parent"
android:layout_height="116px"
android:textColor="#FFFFFFFF"
android:textSize="43px"
@@ -9,6 +9,10 @@
android:gravity="center"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:paddingStart="30dp"
android:paddingEnd="30dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:clickable="true"
android:focusable="true"
>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/caseName"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="84px"
android:textColor="#FFFFFFFF"
android:textSize="34px"
@@ -13,5 +13,6 @@
android:paddingStart="30dp"
android:paddingEnd="30dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
>
</TextView>

View File

@@ -0,0 +1,3 @@
package com.mogo.eagle.core.data.badcase
data class RecordCaseEntity(var caseId: Int,var caseName: String,var topicList: ArrayList<String>)