diff --git a/app_ipc_monitoring/build.gradle b/app_ipc_monitoring/build.gradle index 3690d79c72..775aab3f0a 100644 --- a/app_ipc_monitoring/build.gradle +++ b/app_ipc_monitoring/build.gradle @@ -1,3 +1,5 @@ +import java.text.SimpleDateFormat + apply plugin: 'com.android.application' android { @@ -24,6 +26,15 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + //插入构建时间 + buildTypes.each { + //设置时间格式 + SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd.HHmmss", Locale.getDefault()) + //获取当前时间 + Date curDate = new Date(System.currentTimeMillis()) + String buildTime = formatter.format(curDate) + it.buildConfigField 'String', 'BUILD_TIME', "\"${buildTime}\"" + } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 @@ -44,13 +55,14 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'androidx.constraintlayout:constraintlayout:2.1.1' + implementation rootProject.ext.dependencies.material + implementation rootProject.ext.dependencies.androidxconstraintlayout + implementation rootProject.ext.dependencies.androidxappcompat implementation 'androidx.recyclerview:recyclerview:1.2.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - implementation "com.google.code.gson:gson:2.8.9" + implementation rootProject.ext.dependencies.gson implementation project(':libraries:mogo-adas') implementation project(':core:mogo-core-data') implementation project(':core:mogo-core-utils') diff --git a/app_ipc_monitoring/src/main/AndroidManifest.xml b/app_ipc_monitoring/src/main/AndroidManifest.xml index 7b879c95e6..b4e003c0bc 100644 --- a/app_ipc_monitoring/src/main/AndroidManifest.xml +++ b/app_ipc_monitoring/src/main/AndroidManifest.xml @@ -29,7 +29,7 @@ - + listAutopilotState = new ArrayList<>(); public final List listMogoReportMessage = new ArrayList<>(); public final List listPerceptionTrafficLight = new ArrayList<>(); + public final List listPredictionObstacleTrajectory = new ArrayList<>(); public final List listBasicInfoReq = new ArrayList<>(); public final List listRecordPanel = new ArrayList<>(); public final List listGlobalPathResp = new ArrayList<>(); @@ -114,7 +116,8 @@ public class DataDistribution { } private String onTransmit(String time, BaseInfo data) { - String str = cutDown(data.toString()); + String temp = data.toString(); + String str = cutDown(temp); if (data instanceof Trajectory) { listTrajectory.add(0, time + str); if (listTrajectory.size() > LIST_SIZE) { @@ -205,6 +208,19 @@ public class DataDistribution { // for (OnAdasClientListener listener : listeners) { // listener.onPerceptionTrafficLight((PerceptionTrafficLight) data); // } +// } + } else if (data instanceof PredictionObstacleTrajectory) { + listPredictionObstacleTrajectory.add(0, time + str); + if (listPredictionObstacleTrajectory.size() > LIST_SIZE) { + listPredictionObstacleTrajectory.remove(listPredictionObstacleTrajectory.size() - 1); + } + if (listener != null) { + listener.onRefresh(); + } +// if (!listeners.isEmpty()) { +// for (OnAdasClientListener listener : listeners) { +// listener.onRefresh(); +// } // } } else if (data instanceof BasicInfoReq) { listBasicInfoReq.add(0, time + str); @@ -295,7 +311,7 @@ public class DataDistribution { // } } - return str; + return temp; } private class WriteThread implements Runnable { diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ConnectStatusAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ConnectStatusAdapter.java new file mode 100644 index 0000000000..5c6cd96285 --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/ConnectStatusAdapter.java @@ -0,0 +1,67 @@ +package com.zhidao.adas.client.adapter; + +import android.annotation.SuppressLint; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.EditText; +import android.widget.TextView; + +import com.zhidao.adas.client.R; +import com.zhidao.adas.client.base.BaseAdapter; +import com.zhidao.adas.client.base.BaseViewHolder; +import com.zhidao.adas.client.bean.IPCConnectState; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + + +/** + * 连接状态 + */ +public class ConnectStatusAdapter extends BaseAdapter { + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS ", Locale.getDefault()); + private static final String POS = "%03d. "; + + public void refreshView() { +// notifyItemChanged(mDatas.size()-1,0); + notifyItemRangeChanged(0, getItemCount()); + } + + @Override + public long getItemId(int position) { + return position; + } + + @SuppressLint("SetTextI18n") + @Override + protected void onBindDataToItem(ViewHolder viewHolder, IPCConnectState data, int position) { + viewHolder.id.setText(String.format(Locale.getDefault(), POS, getItemCount() - position)); + viewHolder.editText.setText(sdf.format(new Date(data.time)) + "\n" + data.status); + viewHolder.editText.setTextColor(mContext.getResources().getColor(data.color)); + } + + @Override + protected View getItemViewResource(ViewGroup viewGroup) { + return LayoutInflater.from(mContext).inflate(R.layout.item_status, viewGroup, false); + } + + + @Override + protected ViewHolder getViewHolder(View view) { + return new ViewHolder(view, this); + } + + + class ViewHolder extends BaseViewHolder { + EditText editText; + TextView id; + + public ViewHolder(View itemView, ConnectStatusAdapter adapter) { + super(itemView, adapter); + editText = itemView.findViewById(R.id.log); + id = itemView.findViewById(R.id.id); + } + } +} \ No newline at end of file diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/IPCConnectState.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/IPCConnectState.java index d5ee3b31e3..cc1ca7c09b 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/IPCConnectState.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/IPCConnectState.java @@ -3,6 +3,7 @@ package com.zhidao.adas.client.bean; import androidx.annotation.ColorRes; public class IPCConnectState { + public final long time; public final String status; @ColorRes public final int color; @@ -10,5 +11,6 @@ public class IPCConnectState { public IPCConnectState(String status, @ColorRes int color) { this.status = status; this.color = color; + time = System.currentTimeMillis(); } } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PredictionObstacleTrajectory.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PredictionObstacleTrajectory.java new file mode 100644 index 0000000000..5ea6472a70 --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PredictionObstacleTrajectory.java @@ -0,0 +1,22 @@ +package com.zhidao.adas.client.bean; + +import com.google.protobuf.TextFormat; + +import mogo.telematics.pad.MessagePad; +import prediction.Prediction; + +public class PredictionObstacleTrajectory extends BaseInfo { + public final Prediction.mPredictionObjects bean; + + public PredictionObstacleTrajectory(MessagePad.Header header, Prediction.mPredictionObjects bean) { + super("接收", bean.getSerializedSize(), header); + this.bean = bean; + } + + + @Override + public String toString() { + return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + } + +} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/FloatWindow.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/FloatWindow.java new file mode 100644 index 0000000000..67a7a2ce87 --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/FloatWindow.java @@ -0,0 +1,181 @@ +package com.zhidao.adas.client.ui; + +import android.app.Activity; +import android.content.Context; +import android.graphics.PixelFormat; +import android.util.DisplayMetrics; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.WindowManager; + +import androidx.recyclerview.widget.RecyclerView; + +import com.zhidao.adas.client.R; +import com.zhidao.adas.client.adapter.ConnectStatusAdapter; +import com.zhidao.adas.client.adapter.DataShowAdapter; +import com.zhidao.adas.client.bean.IPCConnectState; +import com.zhidao.adas.client.utils.MyLinearLayoutManager; + +import java.lang.reflect.Field; +import java.util.List; + +/** + * @author xuxinchao + * @description + * @since: 2022/4/20 + */ +public class FloatWindow implements View.OnTouchListener { + + private final Activity mContext; + private WindowManager.LayoutParams mWindowParams; + private WindowManager mWindowManager; + + private View mFloatLayout; + private float mInViewX; + private float mInViewY; + private float mDownInScreenX; + private float mDownInScreenY; + private float mInScreenX; + private float mInScreenY; + private RecyclerView rv_status; + private ConnectStatusAdapter adapter; + private List list; + + public FloatWindow(Activity context, List list) { + this.mContext = context; + this.list = list; + initFloatWindow(); + } + public void refreshView(){ + if (adapter!=null){ + adapter.refreshView(); + } + } + + private void initRV() { + //创建默认的线性LayoutManager 横向的GridLayoutManager + MyLinearLayoutManager linearLayoutManager = new MyLinearLayoutManager(mContext); +// linearLayoutManager.setStackFromEnd(true);//列表再底部开始展示,反转后由上面开始展示 +// linearLayoutManager.setReverseLayout(true);//列表翻转 + rv_status.setLayoutManager(linearLayoutManager); + //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能 + rv_status.setHasFixedSize(false); + rv_status.setNestedScrollingEnabled(false); + adapter = new ConnectStatusAdapter(); + adapter.setHasStableIds(true); + rv_status.setAdapter(adapter); + adapter.setData(list); + } + + private void initFloatWindow() { + LayoutInflater inflater = LayoutInflater.from(mContext); + if (inflater == null) + return; + mFloatLayout = (View) inflater.inflate(R.layout.layout_float, null); + rv_status = mFloatLayout.findViewById(R.id.rv_status); + mFloatLayout.setOnTouchListener(this); + initRV(); + mWindowParams = new WindowManager.LayoutParams(); +// mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); +// if (Build.VERSION.SDK_INT >= 26) {//8.0新特性 +// mWindowParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; +// }else{ +// mWindowParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; +// } + + mWindowManager = mContext.getWindowManager(); + + mWindowParams.format = PixelFormat.RGBA_8888; + mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; + mWindowParams.gravity = Gravity.START | Gravity.TOP; + mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT; + mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + mWindowParams.alpha = 0.9F; + } + + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + return floatLayoutTouch(motionEvent); + } + + private boolean floatLayoutTouch(MotionEvent motionEvent) { + switch (motionEvent.getAction()) { + case MotionEvent.ACTION_DOWN: + // 获取相对View的坐标,即以此View左上角为原点 + mInViewX = motionEvent.getX(); + mInViewY = motionEvent.getY(); + // 获取相对屏幕的坐标,即以屏幕左上角为原点 + mDownInScreenX = motionEvent.getRawX(); + mDownInScreenY = motionEvent.getRawY() - getSysBarHeight(mContext); + mInScreenX = motionEvent.getRawX(); + mInScreenY = motionEvent.getRawY() - getSysBarHeight(mContext); + break; + case MotionEvent.ACTION_MOVE: + // 更新浮动窗口位置参数 + mInScreenX = motionEvent.getRawX(); + mInScreenY = motionEvent.getRawY() - getSysBarHeight(mContext); + mWindowParams.x = (int) (mInScreenX - mInViewX); + mWindowParams.y = (int) (mInScreenY - mInViewY); + // 手指移动的时候更新小悬浮窗的位置 + mWindowManager.updateViewLayout(mFloatLayout, mWindowParams); + break; + case MotionEvent.ACTION_UP: + // 如果手指离开屏幕时,xDownInScreen和xInScreen相等,且yDownInScreen和yInScreen相等,则视为触发了单击事件。 + if (mDownInScreenX == mInScreenX && mDownInScreenY == mInScreenY) { + + } + break; + } + return true; + } + + public void showFloatWindow(float y) { + if (mFloatLayout.getParent() == null) { + DisplayMetrics metrics = new DisplayMetrics(); + // 默认固定位置,靠屏幕右边缘的中间 + mWindowManager.getDefaultDisplay().getMetrics(metrics); + mWindowParams.x = metrics.widthPixels; + mWindowParams.y = (int) (y); + mWindowManager.addView(mFloatLayout, mWindowParams); + } + } + + + public void hideFloatWindow() { + if (mFloatLayout.getParent() != null) + mWindowManager.removeView(mFloatLayout); + } + + public void setFloatLayoutAlpha(boolean alpha) { + if (alpha) + mFloatLayout.setAlpha((float) 0.5); + else + mFloatLayout.setAlpha(1); + } + + private int sbar = -1; + + // 获取系统状态栏高度 + public int getSysBarHeight(Context contex) { + if (sbar == -1) { + Class c; + Object obj; + Field field; + int x; + sbar = 0; + try { + c = Class.forName("com.android.internal.R$dimen"); + obj = c.newInstance(); + field = c.getField("status_bar_height"); + x = Integer.parseInt(field.get(obj).toString()); + sbar = contex.getResources().getDimensionPixelSize(x); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + return sbar; + } + +} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/InfoFragment.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/InfoFragment.java index 0efabf141b..4ea018b8ea 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/InfoFragment.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/InfoFragment.java @@ -146,6 +146,9 @@ public class InfoFragment extends BaseFragment { case Constants.TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT: adapter.setData(DataDistribution.getInstance().listPerceptionTrafficLight); break; + case Constants.TITLE.RECEIVE_PREDICTION_OBSTACLE_TRAJECTORY: + adapter.setData(DataDistribution.getInstance().listPredictionObstacleTrajectory); + break; case Constants.TITLE.RECEIVE_ERROR: adapter.setData(DataDistribution.getInstance().listErrorData); break; diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java index c44ba91b5e..8906ff70f3 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java @@ -57,6 +57,7 @@ import com.zhidao.adas.client.bean.IPCConnectState; import com.zhidao.adas.client.bean.MogoReportMessage; import com.zhidao.adas.client.bean.MySSHResult; import com.zhidao.adas.client.bean.PerceptionTrafficLight; +import com.zhidao.adas.client.bean.PredictionObstacleTrajectory; import com.zhidao.adas.client.bean.RecordPanel; import com.zhidao.adas.client.bean.TrackedObjects; import com.zhidao.adas.client.bean.Trajectory; @@ -76,7 +77,6 @@ import com.zhidao.support.adas.high.common.Constants.IPC_CONNECTION_STATUS; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.common.ProtocolStatus; import com.zhidao.support.adas.high.common.ReceiveTimeoutManager; -import com.zhidao.support.recorder.RecordDataManager; import java.net.Inet4Address; import java.net.InetAddress; @@ -92,13 +92,14 @@ import io.netty.channel.Channel; import mogo.telematics.pad.MessagePad; import mogo_msg.MogoReportMsg; import perception.TrafficLightOuterClass; +import prediction.Prediction; import record_cache.RecordPanelOuterClass; public class MainActivity extends BaseActivity implements OnAdasListener, OnAdasConnectStatusListener, BaseAdapter.OnItemClickListener { private final static String TAG = MainActivity.class.getSimpleName(); private static final int WHAT_IPC_IP = 0x00; private static final int WHAT_DRIVER_IP = 0x01; - private static final int WHATIPC_CONNECT_STATE = 0x02; + private static final int WHAT_IPC_CONNECT_STATE = 0x02; private EditText etIp; private ImageView role; private ImageView tvIp; @@ -124,7 +125,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas private final List titleFragmentData = new ArrayList<>(); private final List titleBtnData = new ArrayList<>(); - + private final List connectStatusList = new ArrayList<>(); private InfoTitleAdapter btnAdapter; private InfoTitleAdapter fragmentAdapter; @@ -141,6 +142,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas private InfoFragment errorFragment; private InfoFragment reportMessageFragment; private InfoFragment perceptionTrafficLightFragment; + private InfoFragment predictionObstacleTrajectoryFragment; private VersionFragment versionFragment; private FragmentManager manager; private FragmentTransaction transaction; @@ -151,7 +153,8 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas private int connectStatus; private AutoPilotModeDialog autoPilotModeDialog; private ListPopupWindow listPopupWindow; - + private FloatWindow floatWindow; + private View include_title; // @Override // protected void onStart() { // super.onStart(); @@ -207,6 +210,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas private void initView() { + include_title = findViewById(R.id.include_title); etIp = findViewById(R.id.et_ip); role = findViewById(R.id.role); line = findViewById(R.id.line); @@ -278,7 +282,6 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas etIp.setSelection(ip.length()); } -// infoTitleList.add("录音测试"); //初始化fragment manager = getSupportFragmentManager(); transaction = manager.beginTransaction(); @@ -393,6 +396,18 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } } }); + tvConnectState.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (floatWindow == null) { + floatWindow = new FloatWindow(MainActivity.this, connectStatusList); + floatWindow.showFloatWindow(include_title.getY() + include_title.getHeight()); + } else { + floatWindow.hideFloatWindow(); + floatWindow = null; + } + } + }); } private void showListPopupWindow() { @@ -431,6 +446,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas titleFragmentData.add(Constants.TITLE.RECEIVE_AUTOPILOT_STATE); titleFragmentData.add(Constants.TITLE.RECEIVE_REPORT_MESSAGE); titleFragmentData.add(Constants.TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT); + titleFragmentData.add(Constants.TITLE.RECEIVE_PREDICTION_OBSTACLE_TRAJECTORY); titleFragmentData.add(Constants.TITLE.RECEIVE_CAR_CONFIG_RESP); titleFragmentData.add(Constants.TITLE.RECEIVE_RECORD_RESULT); titleFragmentData.add(Constants.TITLE.RECEIVE_GLOBAL_PATH_RESP); @@ -446,7 +462,6 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas titleBtnData.add("数据采集5秒"); titleBtnData.add("数据采集start"); titleBtnData.add("数据采集end"); - titleBtnData.add("录音测试"); titleBtnData.add("发送信号灯"); titleBtnData.add("自动驾驶限速"); titleBtnData.add("重启Docker"); @@ -588,6 +603,14 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas transaction.commit(); } break; + case Constants.TITLE.RECEIVE_PREDICTION_OBSTACLE_TRAJECTORY: + if (predictionObstacleTrajectoryFragment == null) + predictionObstacleTrajectoryFragment = new InfoFragment(data); + if (!predictionObstacleTrajectoryFragment.isVisible()) { + transaction.replace(R.id.fl_info, predictionObstacleTrajectoryFragment); + transaction.commit(); + } + break; case Constants.TITLE.RECEIVE_CAR_CONFIG_RESP: AdasManager.getInstance().sendCarConfigReq(); if (versionFragment == null) @@ -630,36 +653,52 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } } - - private String onUpdateConnectStateView() { - String status; + private int getStatusColor(int connectStatus) { int color; switch (connectStatus) { case IPC_CONNECTION_STATUS.CONNECTED: - status = "已连接"; color = R.color.connect_status_connected; break; default: case IPC_CONNECTION_STATUS.DISCONNECTED: - status = "未连接"; color = R.color.connect_status_disconnected; break; case IPC_CONNECTION_STATUS.CONNECTING: - status = "连接中"; color = R.color.connect_status_connecting; break; case IPC_CONNECTION_STATUS.SEARCH_ADDRESS: - status = "搜索IP"; color = R.color.connect_status_search_address; break; case IPC_CONNECTION_STATUS.NOT_FOUND_ADDRESS: - status = "未找到"; color = R.color.connect_status_disconnecting; break; } + return color; + } + + private String onUpdateConnectStateView() { + String status; + switch (connectStatus) { + case IPC_CONNECTION_STATUS.CONNECTED: + status = "已连接"; + break; + default: + case IPC_CONNECTION_STATUS.DISCONNECTED: + status = "未连接"; + break; + case IPC_CONNECTION_STATUS.CONNECTING: + status = "连接中"; + break; + case IPC_CONNECTION_STATUS.SEARCH_ADDRESS: + status = "搜索IP"; + break; + case IPC_CONNECTION_STATUS.NOT_FOUND_ADDRESS: + status = "未找到"; + break; + } Message msg = Message.obtain(); - msg.obj = new IPCConnectState(status, color); - msg.what = WHATIPC_CONNECT_STATE; + msg.obj = new IPCConnectState(status, getStatusColor(connectStatus)); + msg.what = WHAT_IPC_CONNECT_STATE; getHandler().sendMessage(msg); return status; } @@ -720,6 +759,12 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas DataDistribution.getInstance().addData(base); } + @Override + public void onPredictionObstacleTrajectory(MessagePad.Header header, Prediction.mPredictionObjects predictionObjects) { + PredictionObstacleTrajectory base = new PredictionObstacleTrajectory(header, predictionObjects); + DataDistribution.getInstance().addData(base); + } + @Override public void onBasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq basicInfoReq) { BasicInfoReq info = new BasicInfoReq(header, basicInfoReq); @@ -857,7 +902,6 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas AdasManager.getInstance().create(options, this); AdasManager.getInstance().setOnAdasListener(this); -// AdasManager.getInstance().setOnAdasConnectStatusListener(this); if (BuildConfig.IS_CLIENT) { /*—————————————作为乘客端———————————*/ @@ -881,18 +925,6 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } - @Override - protected void onPause() { - super.onPause(); -// AdasManager.getInstance().pause(); - } - - @Override - protected void onResume() { - super.onResume(); -// AdasManager.getInstance().resume(); - } - @Override protected void onDestroy() { super.onDestroy(); @@ -906,7 +938,12 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override - public void onConnectionIPCStatus(int ipcConnectionStatus, String failedMsg) { + public void onConnectionIPCStatus(int ipcConnectionStatus, String reason) { + Log.i(TAG, "连接状态=" + (reason == null ? "主动断开连接" : reason)); + connectStatusList.add(0, new IPCConnectState(reason == null ? "主动断开连接" : reason, getStatusColor(ipcConnectionStatus))); + if (connectStatusList.size() > 100) { + connectStatusList.remove(connectStatusList.size() - 1); + } connectStatus = ipcConnectionStatus; String status = onUpdateConnectStateView(); if (connectStatus == IPC_CONNECTION_STATUS.CONNECTED) { @@ -917,10 +954,6 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas Constants.addIpcUsedIps(this, ips, tem); } } else if (connectStatus == IPC_CONNECTION_STATUS.DISCONNECTED) { - if (!TextUtils.isEmpty(failedMsg)) { - status += " failedMsg=" + failedMsg; - showToastCenter("连接失败:" + failedMsg); - } getHandler().sendEmptyMessage(WHAT_IPC_IP); } // LogSave.getInstance().saveLog("连接状态", status); @@ -1012,12 +1045,6 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas CupidLogUtils.w(TAG, "AutopilotRecord===>send:" + bEnd); break; case 6: - //录音测试 - CupidLogUtils.w(TAG, "录音测试"); - RecordDataManager.getInstance().init(MainActivity.this, "1234567", "", 22, "", ""); - RecordDataManager.getInstance().record(); - break; - case 7: //发送信号灯 MessagePad.TrafficLightStatus left = MessagePad.TrafficLightStatus.newBuilder() .setPhaseNo("1") @@ -1041,7 +1068,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas .build(); AdasManager.getInstance().sendTrafficLightData("10038", 26.848153, 112.574883, "180.0", "SN", 100413, -4, 201, 0, detail); break; - case 8: + case 7: //速度设置 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("自动驾驶限速"); @@ -1068,27 +1095,27 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas builder.show();//显示Dialog对话框 break; - case 9: + case 8: //重启Docker AdasManager.getInstance().rebootAPDocker(); break; - case 10: + case 9: //重启IPC AdasManager.getInstance().rebootIPC(); break; - case 11: + case 10: //关机 AdasManager.getInstance().shutdownIPC(); break; - case 12: + case 11: //采集类型 AdasManager.getInstance().sendRecordCause(recordKey, recordFileName, "1", "变道有干扰"); break; - case 13: + case 12: //打开演示模式 AdasManager.getInstance().sendDemoModeReq(1); break; - case 14: + case 13: //关闭演示模式 AdasManager.getInstance().sendDemoModeReq(0); break; @@ -1107,7 +1134,10 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas ipcIp.setVisibility(View.VISIBLE); ipcIp.setText("司机IP:" + NSDNettyManager.getInstance().getConnServerIp()); break; - case WHATIPC_CONNECT_STATE: + case WHAT_IPC_CONNECT_STATE: + if (floatWindow != null) { + floatWindow.refreshView(); + } IPCConnectState status = (IPCConnectState) msg.obj; tvConnectState.setText(status.status); tvConnectState.setTextColor(getResources().getColor(status.color)); diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java index 9eb89345e7..ff7f719b48 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java @@ -167,10 +167,11 @@ public class VersionFragment extends BaseFragment { list.add(new Config("最大自动驾驶限速:", adasConfig == null ? null : adasConfig.getMaxSpeedLimit() + "m/s")); list.add(new Config("最小加速度:", adasConfig == null ? null : adasConfig.getMinAcceleration() + "m/s²")); list.add(new Config("最大加速度:", adasConfig == null ? null : adasConfig.getMaxAcceleration() + "m/s²")); - list.add(new Config("IPC通信协议版本:", adasConfig == null ? null : String.valueOf(adasConfig.getProtocolVersion().getNumber()))); + list.add(new Config("IPC通信协议版本:", adasConfig == null ? null : String.valueOf(adasConfig.getProtocolVersionValue()))); list.add(new Config("APP通信协议版本:", String.valueOf(AdasManager.getInstance().getProtocolVersion()))); } list.add(new Config("ADAS LIB版本:", AdasManager.getInstance().getAdasVersion())); + list.add(new Config("APP构建时间:", BuildConfig.BUILD_TIME)); adapter.setData(list); } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/Constants.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/Constants.java index cc1308c998..2b4d91388a 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/Constants.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/Constants.java @@ -150,6 +150,7 @@ public class Constants { String RECEIVE_AUTOPILOT_STATE = "自动驾驶状态"; String RECEIVE_REPORT_MESSAGE = "监控事件"; String RECEIVE_PERCEPTION_TRAFFIC_LIGHT = "感知红绿灯"; + String RECEIVE_PREDICTION_OBSTACLE_TRAJECTORY = "他车轨迹预测"; // String RECEIVE_BASIC_INFO_REQ = "自动驾驶设备基础信息请求"; String RECEIVE_CAR_CONFIG_RESP = "信息与配置"; diff --git a/app_ipc_monitoring/src/main/res/drawable/bg_float.xml b/app_ipc_monitoring/src/main/res/drawable/bg_float.xml new file mode 100644 index 0000000000..eeb2ab95b9 --- /dev/null +++ b/app_ipc_monitoring/src/main/res/drawable/bg_float.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/app_ipc_monitoring/src/main/res/layout/item_status.xml b/app_ipc_monitoring/src/main/res/layout/item_status.xml new file mode 100644 index 0000000000..a4cfdf3b81 --- /dev/null +++ b/app_ipc_monitoring/src/main/res/layout/item_status.xml @@ -0,0 +1,31 @@ + + + + + + + + + + diff --git a/app_ipc_monitoring/src/main/res/layout/layout_float.xml b/app_ipc_monitoring/src/main/res/layout/layout_float.xml new file mode 100644 index 0000000000..9cbebe07f8 --- /dev/null +++ b/app_ipc_monitoring/src/main/res/layout/layout_float.xml @@ -0,0 +1,17 @@ + + + + + + + + \ No newline at end of file diff --git a/app_ipc_monitoring/src/main/res/values/styles.xml b/app_ipc_monitoring/src/main/res/values/styles.xml index 725f5b6689..71a18efd24 100644 --- a/app_ipc_monitoring/src/main/res/values/styles.xml +++ b/app_ipc_monitoring/src/main/res/values/styles.xml @@ -28,4 +28,7 @@ true +