Merge branch 'dev_robotaxi-d-app-module_270_220510_2.7.0' of gitlab.zhidaoauto.com:zhjt/AndroidApp/MoGoEagleEye into dev_robotaxi-d-app-module_270_220510_2.7.0
Conflicts: core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt
@@ -24,7 +24,6 @@ import com.mogo.commons.mvp.MvpFragment;
|
||||
import com.mogo.commons.mvp.Presenter;
|
||||
import com.mogo.commons.voice.AIAssist;
|
||||
import com.mogo.eagle.core.data.config.HmiBuildConfig;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
|
||||
@@ -32,6 +31,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListener
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager;
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.eagle.core.utilcode.mogo.toast.TipToast;
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
|
||||
import com.mogo.map.MogoMapUIController;
|
||||
import com.mogo.map.MogoMarkerManager;
|
||||
@@ -41,12 +41,10 @@ import com.mogo.module.common.MogoApisHandler;
|
||||
import com.mogo.module.common.constants.DataTypes;
|
||||
import com.mogo.module.common.view.OnPreventFastClickListener;
|
||||
import com.mogo.och.bus.R;
|
||||
import com.mogo.och.bus.ui.BusTrafficLightView;
|
||||
import com.mogo.och.bus.util.BDRouteDataTestUtils;
|
||||
import com.mogo.och.bus.view.BusArcView;
|
||||
import com.mogo.och.bus.view.SlidePanelView;
|
||||
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
import record_cache.RecordPanelOuterClass;
|
||||
|
||||
/**
|
||||
@@ -159,49 +157,33 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
|
||||
|
||||
@Override
|
||||
public void onClickImpl(View v) {
|
||||
// if (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE){
|
||||
if (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE){
|
||||
restartAutopilot();
|
||||
// }
|
||||
}else {
|
||||
TipToast.shortTip(getResources().getString(R.string.bus_auto_disable_tip));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// debug下调用测试面板 2022.2.25修改到 长按当前站点名字
|
||||
// if (DebugConfig.isDebug()) {
|
||||
// ctvAutopilotStatus.setOnLongClickListener(v -> {
|
||||
// debugTestBar();
|
||||
// return true;
|
||||
// });
|
||||
// }
|
||||
onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState());
|
||||
setAutopilotBtnStatus(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState());
|
||||
// 模拟 不可自动驾驶,目前场景是刚开机,adas还未和工控机连接
|
||||
findViewById(R.id.btnAutopilotDisable).setOnClickListener(view ->
|
||||
// MogoApisHandler.getInstance().getApis()
|
||||
// .getAdasControllerApi()
|
||||
// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE, "不能使用")
|
||||
debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE)
|
||||
debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE)
|
||||
);
|
||||
|
||||
// 模拟 可自动驾驶,工控机连接正常,且处于人工干预状态
|
||||
findViewById(R.id.btnAutopilotEnable).setOnClickListener(view ->
|
||||
// MogoApisHandler.getInstance().getApis()
|
||||
// .getAdasControllerApi()
|
||||
// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE, "能使用")
|
||||
debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE)
|
||||
debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE)
|
||||
);
|
||||
|
||||
// 模拟 自动驾驶能力,自动驾驶中,可能是停车,可能是行进,但是是机器在处理车的前进后退,不是人
|
||||
findViewById(R.id.btnAutopilotRunning).setOnClickListener(view ->
|
||||
// MogoApisHandler.getInstance().getApis()
|
||||
// .getAdasControllerApi()
|
||||
// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING, "Running")
|
||||
debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING)
|
||||
debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING)
|
||||
);
|
||||
|
||||
// 模拟 自动驾驶网约车回调数据
|
||||
findViewById(R.id.btnAutopilotArrive).setOnClickListener(view ->
|
||||
// MogoApisHandler.getInstance().getApis()
|
||||
// .getAdasControllerApi().mockOchStatus(-1, "Arrived")
|
||||
debugArrivedStation()
|
||||
debugArrivedStation()
|
||||
);
|
||||
|
||||
findViewById(R.id.btnAutopilotRoute).setOnClickListener(view -> debugArrivedRoute());
|
||||
@@ -309,66 +291,64 @@ public abstract class BaseBusTabFragment<V extends IView, P extends Presenter<V>
|
||||
});
|
||||
}
|
||||
|
||||
public void updateAutopilotStatus(int autopilotStatus){
|
||||
public void setAutopilotBtnStatus(int autopilotStatus) {
|
||||
if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE
|
||||
== autopilotStatus) {//0不可用
|
||||
ctvAutopilotStatusIv.setImageResource(R.drawable.bus_wrong_autopilot_icon);
|
||||
ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal));
|
||||
ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_failure_tv));
|
||||
ctvAutopilotStatus.setFocusableInTouchMode(false);
|
||||
ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_disable));
|
||||
ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_runnig_tv));
|
||||
ctvAutopilotStatusIv.setImageResource(R.drawable.bus_disable_autopilot_icon);
|
||||
ctvAutopilotStatus.setSelected(false);
|
||||
ctvAutopilotStatus.setFocusableInTouchMode(true);
|
||||
|
||||
UiThreadHandler.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_disable));
|
||||
ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_runnig_tv));
|
||||
ctvAutopilotStatusIv.setImageResource(R.drawable.bus_disable_autopilot_icon);
|
||||
ctvAutopilotStatus.setSelected(false);
|
||||
ctvAutopilotStatus.setFocusableInTouchMode(true);
|
||||
// ctvAutopilotStatus.setPressed(false);
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
} else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE
|
||||
} else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == autopilotStatus
|
||||
|| IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING
|
||||
== autopilotStatus) {//1可用
|
||||
ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal));
|
||||
ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_runnig_tv));
|
||||
ctvAutopilotStatusIv.setImageResource(R.drawable.bus_ic_autopilot);
|
||||
ctvAutopilotStatus.setSelected(false);
|
||||
ctvAutopilotStatus.setSelected(true);
|
||||
ctvAutopilotStatus.setFocusableInTouchMode(true);
|
||||
// ctvAutopilotStatus.setPressed(true);
|
||||
} else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING
|
||||
}
|
||||
}
|
||||
|
||||
public void updateAutopilotStatus(int autopilotStatus){
|
||||
if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING
|
||||
== autopilotStatus) {//2 running
|
||||
ctvAutopilotStatusIv.setImageResource(R.drawable.bus_right_autopilot_icon);
|
||||
ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal));
|
||||
ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_success_tv));
|
||||
ctvAutopilotStatus.setSelected(false);
|
||||
ctvAutopilotStatus.setFocusableInTouchMode(false);
|
||||
UiThreadHandler.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
ctvAutopilotStatusIv.setImageResource(R.drawable.bus_ic_autopilot);
|
||||
ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_runnig_tv));
|
||||
ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal));
|
||||
ctvAutopilotStatus.setSelected(true);
|
||||
ctvAutopilotStatus.setFocusableInTouchMode(true);
|
||||
// ctvAutopilotStatus.setPressed(false);
|
||||
}
|
||||
}, 1000);
|
||||
}else {
|
||||
ctvAutopilotStatusIv.setImageResource(R.drawable.bus_wrong_autopilot_icon);
|
||||
ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal));
|
||||
ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_failure_tv));
|
||||
ctvAutopilotStatus.setFocusableInTouchMode(false);
|
||||
ctvAutopilotStatus.setSelected(false);
|
||||
}
|
||||
UiThreadHandler.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
setAutopilotBtnStatus(autopilotStatus);
|
||||
}
|
||||
},1000);
|
||||
}
|
||||
|
||||
private void changeAutopilotBtnView(int autopilotStatus, boolean isAnimateRunning) {
|
||||
|
||||
CallerLogger.INSTANCE.d(M_BUS + TAG, "onStateChangeChangeAutopilotBtnView: "
|
||||
+ autopilotStatus + "isAnimateRunning = " + isAnimateRunning);
|
||||
if (isAnimateRunning && IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING
|
||||
!= autopilotStatus) {
|
||||
// 主动开启自动驾驶中,不为2(为0、1)则继续loading
|
||||
return;
|
||||
}
|
||||
CallerLogger.INSTANCE.d(M_BUS + TAG, "onStateChangeChangeAutopilotBtnView: " + autopilotStatus + "isAnimateRunning = " + isAnimateRunning);
|
||||
stopAutopilotAnimation();
|
||||
updateAutopilotStatus(autopilotStatus);
|
||||
if (isAnimateRunning){
|
||||
stopAutopilotAnimation();
|
||||
updateAutopilotStatus(autopilotStatus);
|
||||
}else {
|
||||
setAutopilotBtnStatus(autopilotStatus);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -785,9 +785,7 @@ public class BusOrderModel {
|
||||
*/
|
||||
public void restartAutopilot() {
|
||||
CallerLogger.INSTANCE.d( M_BUS + TAG, "重启自动驾驶===" + isGoingToNextStation );
|
||||
if ( isGoingToNextStation ) {
|
||||
autoDriveToNextStation( true );
|
||||
}
|
||||
autoDriveToNextStation( true );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.mogo.och.bus.presenter;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS;
|
||||
import static com.mogo.och.bus.constant.BusConst.TIMER_START_AUTOPILOT_INTERVAL;
|
||||
|
||||
import android.location.Location;
|
||||
import android.os.Looper;
|
||||
@@ -105,8 +104,10 @@ public class BusPresenter extends Presenter<BusFragment>
|
||||
}
|
||||
|
||||
public void restartAutopilot() {
|
||||
currentAutopilotStatus = -1;
|
||||
BusOrderModel.getInstance().restartAutopilot();
|
||||
if (BusOrderModel.getInstance().isGoingToNextStation()){
|
||||
currentAutopilotStatus = -1;
|
||||
BusOrderModel.getInstance().restartAutopilot();
|
||||
}
|
||||
}
|
||||
|
||||
public void onChangeOperationStatus() {
|
||||
@@ -125,7 +126,7 @@ public class BusPresenter extends Presenter<BusFragment>
|
||||
mStationList.clear();
|
||||
mStationList.addAll(stationList);
|
||||
mCurrentStation = currentStation;
|
||||
functionDemoModeChange();
|
||||
// functionDemoModeChange();
|
||||
CallerLogger.INSTANCE.d(M_BUS + "BusOrderModel =", " mCurrentStation =" + mCurrentStation);
|
||||
if (mView != null) {
|
||||
runOnUIThread(() -> mView.refreshBusStations(
|
||||
@@ -221,7 +222,6 @@ public class BusPresenter extends Presenter<BusFragment>
|
||||
return;
|
||||
}
|
||||
runOnUIThread(() -> {
|
||||
mView.onAutopilotEnableChange(false);
|
||||
mView.onAutopilotStatusChanged(currentAutopilotStatus);
|
||||
});
|
||||
}
|
||||
@@ -246,14 +246,8 @@ public class BusPresenter extends Presenter<BusFragment>
|
||||
|
||||
@Override
|
||||
public void startOpenAutopilot() {
|
||||
//非美化模式下启动动画
|
||||
runOnUIThread(() -> mView.startAutopilotAnimation());
|
||||
// TODO: 2021/8/20 无工控机环境, 手动调起自动驾驶开启返回结果,有工控机环境要删除
|
||||
// UiThreadHandler.postDelayed(new Runnable() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
// debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING);
|
||||
// }
|
||||
// },2300);
|
||||
}
|
||||
|
||||
private void runOnUIThread(Runnable executor) {
|
||||
|
||||
@@ -23,4 +23,5 @@
|
||||
<!-- <string name="bus_arrive_to_end_start1">上车</string>-->
|
||||
<string name="bus_arrive_to_end_end">终</string>
|
||||
<!-- <string name="bus_arrive_to_end_end1">下车</string>-->
|
||||
<string name="bus_auto_disable_tip">自动驾驶状态为0不可用</string>
|
||||
</resources>
|
||||
|
||||
@@ -43,7 +43,8 @@ public class OCHBorderShadowLayout extends LinearLayout {
|
||||
|
||||
//阴影颜色
|
||||
private int shadowColor = Color.parseColor("#333333");
|
||||
|
||||
//阴影的位置
|
||||
private int shadowPosition = 0;
|
||||
//阴影半径
|
||||
private float shadowRadius = 0f;
|
||||
|
||||
@@ -93,6 +94,7 @@ public class OCHBorderShadowLayout extends LinearLayout {
|
||||
xOffset = typedArray.getDimension(R.styleable.ShadowLayout_xOffset,DimenUtil.INSTANCE.dp2px(10));
|
||||
yOffset = typedArray.getDimension(R.styleable.ShadowLayout_yOffset,DimenUtil.INSTANCE.dp2px(10));
|
||||
bgColor = typedArray.getColor(R.styleable.ShadowLayout_bgColor,Color.WHITE);
|
||||
shadowPosition = typedArray.getInt(R.styleable.ShadowLayout_shadow_position,0);
|
||||
typedArray.recycle();
|
||||
|
||||
if (shadowRadius<0){
|
||||
@@ -208,7 +210,23 @@ public class OCHBorderShadowLayout extends LinearLayout {
|
||||
}
|
||||
// mPaint.setShadowLayer(blurRadius,0,0,shadowColor);
|
||||
if (blurRadius>0){
|
||||
mPaint.setMaskFilter(new BlurMaskFilter(blurRadius,BlurMaskFilter.Blur.NORMAL));
|
||||
switch (shadowPosition){
|
||||
case 0:
|
||||
mPaint.setMaskFilter(new BlurMaskFilter(blurRadius,BlurMaskFilter.Blur.NORMAL));
|
||||
break;
|
||||
case 1:
|
||||
mPaint.setMaskFilter(new BlurMaskFilter(blurRadius,BlurMaskFilter.Blur.SOLID));
|
||||
break;
|
||||
case 2:
|
||||
mPaint.setMaskFilter(new BlurMaskFilter(blurRadius,BlurMaskFilter.Blur.OUTER));
|
||||
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
|
||||
mPaint.setStrokeWidth(0);
|
||||
break;
|
||||
case 3:
|
||||
mPaint.setMaskFilter(new BlurMaskFilter(blurRadius,BlurMaskFilter.Blur.INNER));
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
mPaint.setColor(shadowColor);
|
||||
mPaint.setAntiAlias(true);
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.mogo.och.common.module.wigets;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapShader;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.LinearGradient;
|
||||
import android.graphics.Matrix;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.Shader;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.TypedValue;
|
||||
|
||||
import com.mogo.och.common.module.R;
|
||||
|
||||
|
||||
/**
|
||||
* Created by mmin18 on 9/27/16.
|
||||
*/
|
||||
public class OCHShapeBlurView extends OCHStockBlurView {
|
||||
Paint mPaint;
|
||||
RectF mRectF;
|
||||
private float mRadius;
|
||||
private int mTopColor; // default #aaffffff
|
||||
private int mBottomColor; // default #aaffffff
|
||||
|
||||
public OCHShapeBlurView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
|
||||
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.OCHRShapeBlurView);
|
||||
mRadius = a.getDimension(R.styleable.OCHRShapeBlurView_och_realtime_radius,
|
||||
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 0, context.getResources().getDisplayMetrics()));
|
||||
mTopColor = a.getColor(R.styleable.OCHRShapeBlurView_och_realtime_start_color, 0xAAFFFFFF);
|
||||
mBottomColor = a.getColor(R.styleable.OCHRShapeBlurView_och_realtime_end_color, 0xAAFFFFFF);
|
||||
a.recycle();
|
||||
mPaint = new Paint();
|
||||
mRectF = new RectF();
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom oval shape
|
||||
*/
|
||||
@Override
|
||||
protected void drawBlurredBitmap(Canvas canvas, Bitmap blurredBitmap, int overlayColor) {
|
||||
if (blurredBitmap != null) {
|
||||
mRectF.right = getWidth();
|
||||
mRectF.bottom = getHeight();
|
||||
|
||||
mPaint.reset();
|
||||
mPaint.setAntiAlias(true);
|
||||
BitmapShader shader = new BitmapShader(blurredBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
|
||||
Matrix matrix = new Matrix();
|
||||
matrix.postScale(mRectF.width() / blurredBitmap.getWidth(), mRectF.height() / blurredBitmap.getHeight());
|
||||
shader.setLocalMatrix(matrix);
|
||||
mPaint.setShader(shader);
|
||||
canvas.drawRoundRect(mRectF, mRadius,mRadius,mPaint);
|
||||
|
||||
mPaint.reset();
|
||||
mPaint.setAntiAlias(true);
|
||||
/* 设置渐变色 这个正方形的颜色是改变的 */
|
||||
Shader mShader = new LinearGradient(getWidth()/2, 0, getWidth()/2, getHeight(),
|
||||
new int[] {mTopColor,mBottomColor}, null, Shader.TileMode.CLAMP); // 一个材质,打造出一个线性梯度沿著一条线。
|
||||
mPaint.setShader(mShader);//0xBFE0E8FF,0xBF6AA2D7
|
||||
canvas.drawRoundRect(mRectF, mRadius,mRadius,mPaint);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,343 @@
|
||||
package com.mogo.och.common.module.wigets;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.ContextWrapper;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
import android.renderscript.Allocation;
|
||||
import android.renderscript.Element;
|
||||
import android.renderscript.RenderScript;
|
||||
import android.renderscript.ScriptIntrinsicBlur;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.view.ViewTreeObserver;
|
||||
|
||||
import com.mogo.och.common.module.R;
|
||||
|
||||
public class OCHStockBlurView extends View {
|
||||
|
||||
private float mDownsampleFactor; // default 4
|
||||
private int mOverlayColor; // default #aaffffff
|
||||
private float mBlurRadius; // default 10dp (0 < r <= 25)
|
||||
private boolean onece;
|
||||
|
||||
private boolean mDirty;
|
||||
private Bitmap mBitmapToBlur, mBlurredBitmap;
|
||||
private Canvas mBlurringCanvas;
|
||||
private boolean mIsRendering;
|
||||
private Paint mPaint;
|
||||
private final Rect mRectSrc = new Rect(), mRectDst = new Rect();
|
||||
// mDecorView should be the root view of the activity (even if you are on a different window like a dialog)
|
||||
private View mDecorView;
|
||||
// If the view is on different root view (usually means we are on a PopupWindow),
|
||||
// we need to manually call invalidate() in onPreDraw(), otherwise we will not be able to see the changes
|
||||
private boolean mDifferentRoot;
|
||||
private static int RENDERING_COUNT;
|
||||
private static int BLUR_IMPL;
|
||||
|
||||
private RenderScript mRenderScript;
|
||||
private ScriptIntrinsicBlur mBlurScript;
|
||||
private Allocation mBlurInput, mBlurOutput;
|
||||
|
||||
public OCHStockBlurView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
|
||||
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.OCHRealtimeBlurView);
|
||||
mBlurRadius = a.getDimension(R.styleable.OCHRealtimeBlurView_och_realtime_blur_radius,
|
||||
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, context.getResources().getDisplayMetrics()));
|
||||
mDownsampleFactor = a.getFloat(R.styleable.OCHRealtimeBlurView_och_realtime_downsample_factor, 4);
|
||||
mOverlayColor = a.getColor(R.styleable.OCHRealtimeBlurView_och_realtime_overlay_color, 0xAAFFFFFF);
|
||||
onece = a.getBoolean(R.styleable.OCHRealtimeBlurView_och_realtime_onece,false);
|
||||
a.recycle();
|
||||
|
||||
mPaint = new Paint();
|
||||
}
|
||||
|
||||
public void setBlurRadius(float radius) {
|
||||
if (mBlurRadius != radius) {
|
||||
mBlurRadius = radius;
|
||||
mDirty = true;
|
||||
invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
public void setDownsampleFactor(float factor) {
|
||||
if (factor <= 0) {
|
||||
throw new IllegalArgumentException("Downsample factor must be greater than 0.");
|
||||
}
|
||||
|
||||
if (mDownsampleFactor != factor) {
|
||||
mDownsampleFactor = factor;
|
||||
mDirty = true; // may also change blur radius
|
||||
releaseBitmap();
|
||||
invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
public void setOverlayColor(int color) {
|
||||
if (mOverlayColor != color) {
|
||||
mOverlayColor = color;
|
||||
invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
private void releaseBitmap() {
|
||||
if (mBitmapToBlur != null) {
|
||||
mBitmapToBlur.recycle();
|
||||
mBitmapToBlur = null;
|
||||
}
|
||||
if (mBlurredBitmap != null) {
|
||||
mBlurredBitmap.recycle();
|
||||
mBlurredBitmap = null;
|
||||
}
|
||||
}
|
||||
|
||||
protected void release() {
|
||||
releaseBitmap();
|
||||
releaseBlur();
|
||||
}
|
||||
|
||||
protected boolean prepare() {
|
||||
if (mBlurRadius == 0) {
|
||||
release();
|
||||
return false;
|
||||
}
|
||||
|
||||
float downsampleFactor = mDownsampleFactor;
|
||||
float radius = mBlurRadius / downsampleFactor;
|
||||
if (radius > 25) {
|
||||
downsampleFactor = downsampleFactor * radius / 25;
|
||||
radius = 25;
|
||||
}
|
||||
|
||||
final int width = getWidth();
|
||||
final int height = getHeight();
|
||||
|
||||
int scaledWidth = Math.max(1, (int) (width / downsampleFactor));
|
||||
int scaledHeight = Math.max(1, (int) (height / downsampleFactor));
|
||||
|
||||
boolean dirty = mDirty;
|
||||
|
||||
if (mBlurringCanvas == null || mBlurredBitmap == null
|
||||
|| mBlurredBitmap.getWidth() != scaledWidth
|
||||
|| mBlurredBitmap.getHeight() != scaledHeight) {
|
||||
dirty = true;
|
||||
releaseBitmap();
|
||||
|
||||
boolean r = false;
|
||||
try {
|
||||
mBitmapToBlur = Bitmap.createBitmap(scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888);
|
||||
if (mBitmapToBlur == null) {
|
||||
return false;
|
||||
}
|
||||
mBlurringCanvas = new Canvas(mBitmapToBlur);
|
||||
|
||||
mBlurredBitmap = Bitmap.createBitmap(scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888);
|
||||
if (mBlurredBitmap == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
r = true;
|
||||
} catch (OutOfMemoryError e) {
|
||||
// Bitmap.createBitmap() may cause OOM error
|
||||
// Simply ignore and fallback
|
||||
} finally {
|
||||
if (!r) {
|
||||
release();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (dirty) {
|
||||
if (prepareBlur(getContext(), mBitmapToBlur, radius)) {
|
||||
mDirty = false;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected void blur(Bitmap bitmapToBlur, Bitmap blurredBitmap) {
|
||||
mBlurInput.copyFrom(bitmapToBlur);
|
||||
mBlurScript.setInput(mBlurInput);
|
||||
mBlurScript.forEach(mBlurOutput);
|
||||
mBlurOutput.copyTo(blurredBitmap);
|
||||
}
|
||||
|
||||
private final ViewTreeObserver.OnPreDrawListener preDrawListener = new ViewTreeObserver.OnPreDrawListener() {
|
||||
@Override
|
||||
public boolean onPreDraw() {
|
||||
final int[] locations = new int[2];
|
||||
Bitmap oldBmp = mBlurredBitmap;
|
||||
View decor = mDecorView;
|
||||
if (decor != null && isShown() && prepare()) {
|
||||
boolean redrawBitmap = mBlurredBitmap != oldBmp;
|
||||
oldBmp = null;
|
||||
decor.getLocationOnScreen(locations);
|
||||
int x = -locations[0];
|
||||
int y = -locations[1];
|
||||
|
||||
getLocationOnScreen(locations);
|
||||
x += locations[0];
|
||||
y += locations[1];
|
||||
|
||||
// just erase transparent
|
||||
mBitmapToBlur.eraseColor(mOverlayColor & 0xffffff);
|
||||
|
||||
int rc = mBlurringCanvas.save();
|
||||
mIsRendering = true;
|
||||
RENDERING_COUNT++;
|
||||
try {
|
||||
mBlurringCanvas.scale(1.f * mBitmapToBlur.getWidth() / getWidth(), 1.f * mBitmapToBlur.getHeight() / getHeight());
|
||||
mBlurringCanvas.translate(-x, -y);
|
||||
if (decor.getBackground() != null) {
|
||||
decor.getBackground().draw(mBlurringCanvas);
|
||||
}
|
||||
decor.draw(mBlurringCanvas);
|
||||
} catch (StopException e) {
|
||||
} finally {
|
||||
mIsRendering = false;
|
||||
RENDERING_COUNT--;
|
||||
mBlurringCanvas.restoreToCount(rc);
|
||||
}
|
||||
|
||||
blur(mBitmapToBlur, mBlurredBitmap);
|
||||
|
||||
if (redrawBitmap || mDifferentRoot) {
|
||||
invalidate();
|
||||
}
|
||||
}
|
||||
if(onece) {
|
||||
mDecorView.getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
protected View getActivityDecorView() {
|
||||
Context ctx = getContext();
|
||||
for (int i = 0; i < 4 && ctx != null && !(ctx instanceof Activity) && ctx instanceof ContextWrapper; i++) {
|
||||
ctx = ((ContextWrapper) ctx).getBaseContext();
|
||||
}
|
||||
if (ctx instanceof Activity) {
|
||||
return ((Activity) ctx).getWindow().getDecorView();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
mDecorView = getRootView();
|
||||
if (mDecorView != null) {
|
||||
mDecorView.getViewTreeObserver().addOnPreDrawListener(preDrawListener);
|
||||
mDifferentRoot = mDecorView.getRootView() != getRootView();
|
||||
if (mDifferentRoot) {
|
||||
mDecorView.postInvalidate();
|
||||
}
|
||||
} else {
|
||||
mDifferentRoot = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
if (mDecorView != null) {
|
||||
mDecorView.getViewTreeObserver().removeOnPreDrawListener(preDrawListener);
|
||||
}
|
||||
release();
|
||||
super.onDetachedFromWindow();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Canvas canvas) {
|
||||
if (mIsRendering) {
|
||||
// Quit here, don't draw views above me
|
||||
throw STOP_EXCEPTION;
|
||||
} else if (RENDERING_COUNT > 0) {
|
||||
// Doesn't support blurview overlap on another blurview
|
||||
} else {
|
||||
super.draw(canvas);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
drawBlurredBitmap(canvas, mBlurredBitmap, mOverlayColor);
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom draw the blurred bitmap and color to define your own shape
|
||||
*
|
||||
* @param canvas
|
||||
* @param blurredBitmap
|
||||
* @param overlayColor
|
||||
*/
|
||||
protected void drawBlurredBitmap(Canvas canvas, Bitmap blurredBitmap, int overlayColor) {
|
||||
if (blurredBitmap != null) {
|
||||
mRectSrc.right = blurredBitmap.getWidth();
|
||||
mRectSrc.bottom = blurredBitmap.getHeight();
|
||||
mRectDst.right = getWidth();
|
||||
mRectDst.bottom = getHeight();
|
||||
canvas.drawBitmap(blurredBitmap, mRectSrc, mRectDst, null);
|
||||
}
|
||||
mPaint.setColor(overlayColor);
|
||||
canvas.drawRect(mRectDst, mPaint);
|
||||
}
|
||||
|
||||
private static class StopException extends RuntimeException {
|
||||
}
|
||||
|
||||
private static StopException STOP_EXCEPTION = new StopException();
|
||||
|
||||
|
||||
public boolean prepareBlur(Context context, Bitmap buffer, float radius) {
|
||||
if (mRenderScript == null) {
|
||||
try {
|
||||
mRenderScript = RenderScript.create(context);
|
||||
mBlurScript = ScriptIntrinsicBlur.create(mRenderScript, Element.U8_4(mRenderScript));
|
||||
} catch (android.renderscript.RSRuntimeException e) {
|
||||
// In release mode, just ignore
|
||||
releaseBlur();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
mBlurScript.setRadius(radius);
|
||||
|
||||
mBlurInput = Allocation.createFromBitmap(mRenderScript, buffer,
|
||||
Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
|
||||
mBlurOutput = Allocation.createTyped(mRenderScript, mBlurInput.getType());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void releaseBlur() {
|
||||
if (mBlurInput != null) {
|
||||
mBlurInput.destroy();
|
||||
mBlurInput = null;
|
||||
}
|
||||
if (mBlurOutput != null) {
|
||||
mBlurOutput.destroy();
|
||||
mBlurOutput = null;
|
||||
}
|
||||
if (mBlurScript != null) {
|
||||
mBlurScript.destroy();
|
||||
mBlurScript = null;
|
||||
}
|
||||
if (mRenderScript != null) {
|
||||
mRenderScript.destroy();
|
||||
mRenderScript = null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -24,7 +24,13 @@
|
||||
<attr name="xOffset" format="dimension"/>
|
||||
<!--竖直位移 -->
|
||||
<attr name="yOffset" format="dimension"/>
|
||||
|
||||
<!-- -->
|
||||
<attr name="shadow_position" format="enum">
|
||||
<enum name="normal" value="0" />
|
||||
<enum name="solid" value="1" />
|
||||
<enum name="outer" value="2" />
|
||||
<enum name="inner" value="3" />
|
||||
</attr>
|
||||
</declare-styleable>
|
||||
|
||||
<!--CardView -->
|
||||
@@ -34,4 +40,16 @@
|
||||
<attr name="och_card_right_bottom_radius" format="dimension" />
|
||||
<attr name="och_card_left_bottom_radius" format="dimension" />
|
||||
</declare-styleable>
|
||||
|
||||
<declare-styleable name="OCHRealtimeBlurView">
|
||||
<attr name="och_realtime_blur_radius" format="dimension" />
|
||||
<attr name="och_realtime_downsample_factor" format="float" />
|
||||
<attr name="och_realtime_overlay_color" format="color" />
|
||||
<attr name="och_realtime_onece" format="boolean" />
|
||||
</declare-styleable>
|
||||
<declare-styleable name="OCHRShapeBlurView">
|
||||
<attr name="och_realtime_start_color" format="color" />
|
||||
<attr name="och_realtime_end_color" format="color" />
|
||||
<attr name="och_realtime_radius" format="dimension" />
|
||||
</declare-styleable>
|
||||
</resources>
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.mogo.och.taxi.passenger.bean;
|
||||
|
||||
import com.mogo.eagle.core.data.BaseData;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Created by pangfan on 2021/8/19
|
||||
*
|
||||
* 查询订单返回数据结构
|
||||
*/
|
||||
public class TaxiPassengerBaseRespBean extends BaseData {
|
||||
public Object data;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.mogo.och.taxi.passenger.bean;
|
||||
|
||||
/**
|
||||
* Created by pangfan on 2021/8/19
|
||||
*
|
||||
* 验证手机号后四位同时流转订单状态
|
||||
*/
|
||||
public class TaxiPassengerCheckPhoneUpdateOrderReqBean {
|
||||
|
||||
public String orderNo;
|
||||
public String phone;
|
||||
|
||||
public TaxiPassengerCheckPhoneUpdateOrderReqBean(String orderNo,String phone) {
|
||||
this.orderNo = orderNo;
|
||||
this.phone = phone;
|
||||
}
|
||||
}
|
||||
@@ -45,7 +45,10 @@ public class TaxiPassengerOrderQueryRespBean extends BaseData {
|
||||
public long startTime;
|
||||
//预计用车时间:预约单=下单时的预约用车时间;即时单=派单成功的时间+预估的达到上车点的时间
|
||||
public long bookingTime;
|
||||
|
||||
//乘客手机号
|
||||
public String passengerPhone;
|
||||
//订单多少乘客
|
||||
public String passengerNum;
|
||||
|
||||
|
||||
// !!!接口中暂无此字段,仅用于本地实现逻辑使用:起始站目的站距离km
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.mogo.och.taxi.passenger.bean;
|
||||
|
||||
/**
|
||||
* Created by pangfan on 2021/8/19
|
||||
*
|
||||
* 验证手机号后四位同时流转订单状态
|
||||
*/
|
||||
public class TaxiPassengerScoreUpdateOrderReqBean {
|
||||
|
||||
public String orderNo;
|
||||
public int star;
|
||||
|
||||
public TaxiPassengerScoreUpdateOrderReqBean(String orderNo, int star) {
|
||||
this.orderNo = orderNo;
|
||||
this.star = star;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.mogo.och.taxi.passenger.callback;
|
||||
|
||||
public interface ITaxiPassengerCheckPhoneCallback {
|
||||
//验证手机号并流转状态
|
||||
void onCheckPhoneAndUpdateOrderStatus(String phoneTail);
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.mogo.och.taxi.passenger.callback;
|
||||
|
||||
public interface ITaxiPassengerCommonCallback {
|
||||
void onCommonCallback();
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.mogo.och.taxi.passenger.callback;
|
||||
|
||||
public interface ITaxiPassengerCommonValueCallback<T> {
|
||||
void onCommonCallback(T t);
|
||||
}
|
||||
@@ -26,10 +26,12 @@ import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr;
|
||||
import com.mogo.eagle.core.utilcode.util.NetworkUtils;
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils;
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
|
||||
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
|
||||
import com.mogo.module.common.MogoApisHandler;
|
||||
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean;
|
||||
@@ -39,6 +41,7 @@ import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerAutopilotPlanningCa
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerNaviChangedCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerVeloctityCallback;
|
||||
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst;
|
||||
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum;
|
||||
@@ -673,6 +676,51 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback
|
||||
SharedPrefsMgr.getInstance(mContext).putInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,(int) sumLength);
|
||||
}
|
||||
|
||||
public void checkPhoneAndUpdateStatus(String phoneTail,ITaxiPassengerCommonCallback commonCallback) {
|
||||
if (mCurrentOCHOrder == null) return;
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "--route--- checkPhoneAndUpdateStatus");
|
||||
TaxiPassengerServiceManager.getInstance().checkPhoneAndUpdateOrderStatus(mContext, mCurrentOCHOrder.orderNo,
|
||||
phoneTail, new TaxiPassengerServiceCallback<TaxiPassengerBaseRespBean>() {
|
||||
@Override
|
||||
public void onSuccess(TaxiPassengerBaseRespBean data) {
|
||||
ToastUtils.showLong("验证成功");
|
||||
if(commonCallback!=null) {
|
||||
commonCallback.onCommonCallback();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError() {
|
||||
ToastUtils.showLong("当前网络异常,请重新验证;若始终异常,请您在手机端取消行程,给您带来不便,十分抱歉!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFail(int code, String msg) {
|
||||
ToastUtils.showLong("onFail"+code+msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void arrivedAndScore(int score,ITaxiPassengerCommonCallback commonCallback) {
|
||||
if (mCurrentOCHOrder == null) return;
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "--route--- checkPhoneAndUpdateStatus");
|
||||
TaxiPassengerServiceManager.getInstance().arrivedAndScore(mContext,mCurrentOCHOrder.orderNo,
|
||||
score, new TaxiPassengerServiceCallback<TaxiPassengerBaseRespBean>() {
|
||||
@Override
|
||||
public void onSuccess(TaxiPassengerBaseRespBean data) {
|
||||
ToastUtils.showLong("评分成功");
|
||||
if(commonCallback!=null) {
|
||||
commonCallback.onCommonCallback();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFail(int code, String msg) {
|
||||
ToastUtils.showLong(msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void runOnUIThread(Runnable executor) {
|
||||
if (executor == null) {
|
||||
return;
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package com.mogo.och.taxi.passenger.network;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerCheckPhoneUpdateOrderReqBean;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryReqBean;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerQueryOrderRouteResp;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import retrofit2.http.Body;
|
||||
@@ -63,4 +66,23 @@ interface TaxiPassengerServiceApi {
|
||||
// @GET( "/autopilot-car-hailing/api/v1/driver/serviceStatus/query" )
|
||||
@GET( "/autopilot-car-hailing/order/v2/driver/taxi/passenger/orderRoute" )
|
||||
Observable<TaxiPassengerQueryOrderRouteResp> queryOrderRoute(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("orderNo") String orderNo);
|
||||
|
||||
/**
|
||||
* 通过orderNo查询订单信息(用于本地已经有orderNo时)
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
@Headers( {"Content-type:application/json;charset=UTF-8"} )
|
||||
@POST( "/autopilot-car-hailing/order/v2/vehicle/taxi/passenger/verification/phone" )
|
||||
Observable<TaxiPassengerBaseRespBean> checkPhoneAndUpdateOrderStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Body TaxiPassengerCheckPhoneUpdateOrderReqBean data);
|
||||
|
||||
/**
|
||||
* 通过orderNo查询订单信息(用于本地已经有orderNo时)
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
@Headers( {"Content-type:application/json;charset=UTF-8"} )
|
||||
@POST( "/autopilot-car-hailing/evaluation/vehicle/taxi/passenger/add" )
|
||||
Observable<TaxiPassengerBaseRespBean> arrivedAndScore(@Header ("appId") String appId, @Header("ticket") String ticket, @Body TaxiPassengerScoreUpdateOrderReqBean data);
|
||||
|
||||
}
|
||||
|
||||
@@ -12,11 +12,14 @@ import com.mogo.eagle.core.network.RequestOptions;
|
||||
import com.mogo.eagle.core.network.SubscribeImpl;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.module.common.MogoApisHandler;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerCheckPhoneUpdateOrderReqBean;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryReqBean;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerQueryOrderRouteResp;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean;
|
||||
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst;
|
||||
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
@@ -141,4 +144,24 @@ public class TaxiPassengerServiceManager {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public void checkPhoneAndUpdateOrderStatus(Context context, String orderNo,String phone ,TaxiPassengerServiceCallback<TaxiPassengerBaseRespBean> callback){
|
||||
|
||||
mOCHTaxiServiceApi.checkPhoneAndUpdateOrderStatus(
|
||||
MoGoAiCloudClientConfig.getInstance().getServiceAppId()
|
||||
,MoGoAiCloudClientConfig.getInstance().getToken()
|
||||
,new TaxiPassengerCheckPhoneUpdateOrderReqBean(orderNo,phone))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(getSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus"));
|
||||
}
|
||||
public void arrivedAndScore(Context context, String orderNo,int star,TaxiPassengerServiceCallback<TaxiPassengerBaseRespBean> callback){
|
||||
mOCHTaxiServiceApi.arrivedAndScore(
|
||||
MoGoAiCloudClientConfig.getInstance().getServiceAppId()
|
||||
,MoGoAiCloudClientConfig.getInstance().getToken()
|
||||
,new TaxiPassengerScoreUpdateOrderReqBean(orderNo,star))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(getSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerADASStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback;
|
||||
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum;
|
||||
import com.mogo.och.taxi.passenger.model.TaxiPassengerGeocodeSearchModel;
|
||||
import com.mogo.och.taxi.passenger.model.TaxiPassengerModel;
|
||||
@@ -149,7 +150,15 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch();
|
||||
return;
|
||||
}
|
||||
if (TaxiPassengerOrderStatusEnum.ArriveAtStart.getCode() == order.orderStatus
|
||||
if (TaxiPassengerOrderStatusEnum.ArriveAtStart.getCode() == order.orderStatus) {
|
||||
runOnUIThread(() -> {
|
||||
mView.showOrHideArrivedEndLayout(false, "");
|
||||
mView.showOrHidePressengerCheckPager(true, order.startSiteAddr,
|
||||
order.endSiteAddr, order.passengerNum, order.carNumber, order.passengerPhone);
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (TaxiPassengerOrderStatusEnum.UserArriveAtStart.getCode() == order.orderStatus
|
||||
|| TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){
|
||||
runOnUIThread(() -> mView.showOrHideServingOrderFragment(true));
|
||||
return;
|
||||
@@ -166,7 +175,6 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
if (TaxiPassengerOrderStatusEnum.JourneyCompleted.getCode() == order.orderStatus){
|
||||
runOnUIThread(() -> {
|
||||
mView.showOrHideServingOrderFragment(false);
|
||||
mView.showOrHideArrivedEndLayout(false, "");
|
||||
});
|
||||
TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch();
|
||||
mCurrentPassengerOrder = null;
|
||||
@@ -174,4 +182,26 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
}
|
||||
}
|
||||
|
||||
public void checkAndUpdateStatus(String phone){
|
||||
TaxiPassengerModel.getInstance().checkPhoneAndUpdateStatus(phone, new ITaxiPassengerCommonCallback() {
|
||||
@Override
|
||||
public void onCommonCallback() {
|
||||
mView.showOrHidePressengerCheckPager(false,"","","","","");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param score 分数
|
||||
*/
|
||||
public void arrivedAndScore(int score){
|
||||
TaxiPassengerModel.getInstance().arrivedAndScore(score, new ITaxiPassengerCommonCallback() {
|
||||
@Override
|
||||
public void onCommonCallback() {
|
||||
mView.showOrHideArrivedEndLayout(false,"");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
package com.mogo.och.taxi.passenger.ui
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.animation.AnimationUtils
|
||||
import android.widget.RelativeLayout
|
||||
import android.widget.TextView
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.utilcode.util.OverlayViewUtils
|
||||
import com.mogo.och.common.module.wigets.OCHBorderShadowLayout
|
||||
import com.mogo.och.taxi.passenger.R
|
||||
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonValueCallback
|
||||
|
||||
/**
|
||||
*
|
||||
* 评价View
|
||||
* Created on 2022/5/16
|
||||
*/
|
||||
class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener {
|
||||
|
||||
constructor(context: Context?) : super(context)
|
||||
|
||||
constructor(context: Context?, attributeSet: AttributeSet) : super(context, attributeSet)
|
||||
|
||||
constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr)
|
||||
|
||||
constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes)
|
||||
|
||||
companion object {
|
||||
const val TAG = "TaxiPassengerArrivedView"
|
||||
}
|
||||
|
||||
init {
|
||||
try {
|
||||
initView(context)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
private lateinit var mArrivedEndStation: TextView
|
||||
private lateinit var ochShadowLayout: OCHBorderShadowLayout
|
||||
|
||||
var taxiPassengerCommonValueCallback: ITaxiPassengerCommonValueCallback<Int>?=null
|
||||
var trAnimation = AnimationUtils.loadAnimation(
|
||||
context, R.anim.left_to_right
|
||||
)
|
||||
|
||||
private fun initView(context: Context) {
|
||||
d(SceneConstant.M_TAXI_P + TAG, "initView")
|
||||
LayoutInflater.from(context).inflate(R.layout.taxi_p_arrived_end_panel, this, true)
|
||||
mArrivedEndStation = findViewById(R.id.arrived_end_station)
|
||||
ochShadowLayout = findViewById(R.id.och_shadow_layout)
|
||||
findViewById<View>(R.id.tv_please_score).setOnClickListener(this)
|
||||
findViewById<View>(R.id.arrived_end_station_title).setOnLongClickListener {
|
||||
OverlayViewUtils.dismissOverlayView(this)
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
override fun onClick(v: View?) {
|
||||
when (v?.id) {
|
||||
R.id.tv_taxi_passenger_number_one -> {
|
||||
taxiPassengerCommonValueCallback?.onCommonCallback(2)
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
fun setDataAndStartAnimation(endSiteAddr: String?) {
|
||||
mArrivedEndStation.text = endSiteAddr
|
||||
ochShadowLayout.startAnimation(trAnimation)
|
||||
}
|
||||
}
|
||||
@@ -4,12 +4,13 @@ import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
import com.mogo.commons.AbsMogoApplication;
|
||||
@@ -26,8 +27,11 @@ import com.mogo.map.uicontroller.VisualAngleMode;
|
||||
import com.mogo.module.common.MogoApisHandler;
|
||||
import com.mogo.module.common.constants.DataTypes;
|
||||
import com.mogo.och.taxi.passenger.R;
|
||||
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonValueCallback;
|
||||
import com.mogo.och.taxi.passenger.presenter.BaseTaxiPassengerPresenter;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
|
||||
/**
|
||||
* 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况
|
||||
@@ -48,8 +52,8 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
private TaxiPassengerV2XNotificationView mV2XNotificationView;
|
||||
|
||||
// private ConstraintLayout mArrivedEndCL;
|
||||
private View mArrivedEndView;
|
||||
private TextView mArrivedEndStation;
|
||||
private WeakReference<TaxiPassengerArrivedView> mArrivedEndView;
|
||||
private WeakReference<TaxiPassengerCheckView> mArrivedCheckView;
|
||||
|
||||
protected TaxiPassengerServingOrderFragment ochServingOrderFragment = null;
|
||||
|
||||
@@ -79,11 +83,22 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
mV2XNotificationView = new TaxiPassengerV2XNotificationView(getContext());
|
||||
CallerHmiManager.INSTANCE.setProxyNotificationView(mV2XNotificationView);
|
||||
|
||||
// mArrivedEndCL = findViewById(R.id.taxi_p_arrive_end_bg);
|
||||
mArrivedEndView = LayoutInflater.from(getContext()).inflate(R.layout.taxi_p_arrived_end_panel,null);
|
||||
mArrivedEndStation = mArrivedEndView.findViewById(R.id.arrived_end_station);
|
||||
initArrivedView();
|
||||
initCheckView();
|
||||
|
||||
mMapswitchBtn = findViewById(R.id.module_och_taxi_swich_map_iv);
|
||||
initListener();
|
||||
|
||||
onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState());
|
||||
|
||||
if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()){
|
||||
switchVRFlatMode(true);
|
||||
}else {
|
||||
switchVRFlatMode(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void initListener(){
|
||||
mMapswitchBtn.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
@@ -99,13 +114,29 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
}
|
||||
});
|
||||
|
||||
onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState());
|
||||
findViewById(R.id.iv_temp).setOnLongClickListener(new View.OnLongClickListener() {
|
||||
int i = 0;
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
if(i%2==0){
|
||||
showOrHideArrivedEndLayout(true,"北京北京北京");
|
||||
}else {
|
||||
showOrHidePressengerCheckPager(true, "开始站点开", "开始站点开始站点开始", "2", "京A888888", "18811539480");
|
||||
}
|
||||
i++;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()){
|
||||
switchVRFlatMode(true);
|
||||
}else {
|
||||
switchVRFlatMode(false);
|
||||
}
|
||||
private void initArrivedView(){
|
||||
mArrivedEndView = new WeakReference<>(new TaxiPassengerArrivedView(getContext()));
|
||||
mArrivedEndView.get().setTaxiPassengerCommonValueCallback(integer -> getPresenter().arrivedAndScore(integer));
|
||||
}
|
||||
|
||||
private void initCheckView() {
|
||||
mArrivedCheckView = new WeakReference<>(new TaxiPassengerCheckView(getContext()));
|
||||
mArrivedCheckView.get().setOnCheckPhoneAndUpdateStatusListener(phoneTail -> getPresenter().checkAndUpdateStatus(phoneTail));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -245,12 +276,33 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
*/
|
||||
public void showOrHideArrivedEndLayout(boolean isShow, String arrivedEndStation){
|
||||
if (isShow){
|
||||
// mArrivedEndCL.setVisibility(View.VISIBLE);
|
||||
OverlayViewUtils.showOverlayView(getActivity(),mArrivedEndView);
|
||||
mArrivedEndStation.setText(arrivedEndStation);
|
||||
if(mArrivedEndView.get()==null){
|
||||
initArrivedView();
|
||||
}
|
||||
OverlayViewUtils.showOverlayView(getActivity(),mArrivedEndView.get(), R.style.och_window_anim_alpha);
|
||||
mArrivedEndView.get().setDataAndStartAnimation(arrivedEndStation);
|
||||
}else {
|
||||
// mArrivedEndCL.setVisibility(View.GONE);
|
||||
OverlayViewUtils.dismissOverlayView(mArrivedEndView);
|
||||
OverlayViewUtils.dismissOverlayView(mArrivedEndView.get());
|
||||
}
|
||||
}
|
||||
|
||||
public void showOrHidePressengerCheckPager(boolean isShow, String startSiteAddr,
|
||||
String endSiteAddr,
|
||||
String passengerNum,
|
||||
String carNumber,
|
||||
String phone) {
|
||||
try {
|
||||
if (isShow) {
|
||||
if(mArrivedCheckView.get()==null){
|
||||
initCheckView();
|
||||
}
|
||||
mArrivedCheckView.get().setData(startSiteAddr, endSiteAddr, passengerNum, carNumber,phone);
|
||||
OverlayViewUtils.showOverlayView(getActivity(), mArrivedCheckView.get());
|
||||
} else {
|
||||
OverlayViewUtils.dismissOverlayView(mArrivedCheckView.get());
|
||||
}
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,209 @@
|
||||
package com.mogo.och.taxi.passenger.ui
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Typeface
|
||||
import android.text.Spannable
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.style.TextAppearanceSpan
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.widget.RelativeLayout
|
||||
import android.widget.TextView
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.utilcode.util.OverlayViewUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.mogo.och.taxi.passenger.R
|
||||
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCheckPhoneCallback
|
||||
|
||||
/**
|
||||
* V2X预警事件view:通过FloatWindow呈现,无需加入到自定义layout中
|
||||
*
|
||||
* Created on 2022/3/16
|
||||
*/
|
||||
class TaxiPassengerCheckView :RelativeLayout, View.OnClickListener {
|
||||
|
||||
constructor(context: Context?) : super(context)
|
||||
|
||||
constructor(context: Context?, attributeSet: AttributeSet) : super(context, attributeSet)
|
||||
|
||||
constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr)
|
||||
|
||||
constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes)
|
||||
|
||||
var onCheckPhoneAndUpdateStatusListener: ITaxiPassengerCheckPhoneCallback?=null
|
||||
|
||||
private lateinit var tvPassengerCount: TextView
|
||||
private lateinit var tvPassengerStart: TextView
|
||||
private lateinit var tvPassengerEnd: TextView
|
||||
private lateinit var tvTaxiNumber: TextView
|
||||
private lateinit var tvTaxiPassengerNumberfirst: TextView
|
||||
private lateinit var tvTaxiPassengerNumberSecond: TextView
|
||||
private lateinit var tvTaxiPassengerNumberThird: TextView
|
||||
private lateinit var tvTaxiPassengerNumberFourth: TextView
|
||||
|
||||
private var index = 0
|
||||
private var phone = ""
|
||||
private val numSelect = arrayOfNulls<Int>(4)
|
||||
private val numSelectTextView = arrayOfNulls<TextView>(4)
|
||||
|
||||
private fun initView(context: Context) {
|
||||
d(SceneConstant.M_TAXI_P + TAG, "initView")
|
||||
LayoutInflater.from(context).inflate(R.layout.taxi_p_passenger_check_panel, this, true)
|
||||
tvPassengerCount = findViewById(R.id.tv_passenger_count)
|
||||
tvPassengerStart = findViewById(R.id.tv_passenger_start)
|
||||
tvPassengerEnd = findViewById(R.id.tv_passenger_end)
|
||||
tvTaxiNumber = findViewById(R.id.tv_taxi_number)
|
||||
tvTaxiPassengerNumberfirst = findViewById(R.id.tv_taxi_passenger_number_first)
|
||||
tvTaxiPassengerNumberSecond = findViewById(R.id.tv_taxi_passenger_number_second)
|
||||
tvTaxiPassengerNumberThird = findViewById(R.id.tv_taxi_passenger_number_third)
|
||||
tvTaxiPassengerNumberFourth = findViewById(R.id.tv_taxi_passenger_number_fourth)
|
||||
keyBoardLogic()
|
||||
numSelectTextView[0] = tvTaxiPassengerNumberfirst
|
||||
numSelectTextView[1] = tvTaxiPassengerNumberSecond
|
||||
numSelectTextView[2] = tvTaxiPassengerNumberThird
|
||||
numSelectTextView[3] = tvTaxiPassengerNumberFourth
|
||||
}
|
||||
|
||||
private fun keyBoardLogic() {
|
||||
findViewById<TextView>(R.id.tv_taxi_passenger_number_one).setOnClickListener(this)
|
||||
findViewById<TextView>(R.id.tv_taxi_passenger_number_two).setOnClickListener(this)
|
||||
findViewById<TextView>(R.id.tv_taxi_passenger_number_three).setOnClickListener(this)
|
||||
findViewById<TextView>(R.id.tv_taxi_passenger_number_four).setOnClickListener(this)
|
||||
findViewById<TextView>(R.id.tv_taxi_passenger_number_five).setOnClickListener(this)
|
||||
findViewById<TextView>(R.id.tv_taxi_passenger_number_six).setOnClickListener(this)
|
||||
findViewById<TextView>(R.id.tv_taxi_passenger_number_seven).setOnClickListener(this)
|
||||
findViewById<TextView>(R.id.tv_taxi_passenger_number_eight).setOnClickListener(this)
|
||||
findViewById<TextView>(R.id.tv_taxi_passenger_number_nine).setOnClickListener(this)
|
||||
findViewById<TextView>(R.id.tv_taxi_passenger_number_zero).setOnClickListener(this)
|
||||
findViewById<TextView>(R.id.tv_taxi_passenger_number_back).setOnClickListener(this)
|
||||
findViewById<TextView>(R.id.tv_taxi_passenger_number_submit).setOnClickListener(this)
|
||||
|
||||
tvTaxiPassengerNumberfirst.setOnClickListener(this)
|
||||
tvTaxiPassengerNumberSecond.setOnClickListener(this)
|
||||
tvTaxiPassengerNumberThird.setOnClickListener(this)
|
||||
tvTaxiPassengerNumberFourth.setOnClickListener(this)
|
||||
|
||||
findViewById<TextView>(R.id.tv_hello).setOnLongClickListener {
|
||||
OverlayViewUtils.dismissOverlayView(this)
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
override fun onClick(v: View?) {
|
||||
when (v?.id) {
|
||||
R.id.tv_taxi_passenger_number_one -> {showNumver(1)}
|
||||
R.id.tv_taxi_passenger_number_two -> {showNumver(2)}
|
||||
R.id.tv_taxi_passenger_number_three-> {showNumver(3)}
|
||||
R.id.tv_taxi_passenger_number_four-> {showNumver(4)}
|
||||
R.id.tv_taxi_passenger_number_five -> {showNumver(5)}
|
||||
R.id.tv_taxi_passenger_number_six -> {showNumver(6)}
|
||||
R.id.tv_taxi_passenger_number_seven -> {showNumver(7)}
|
||||
R.id.tv_taxi_passenger_number_eight -> {showNumver(8)}
|
||||
R.id.tv_taxi_passenger_number_nine -> {showNumver(9)}
|
||||
R.id.tv_taxi_passenger_number_zero -> {showNumver(0)}
|
||||
R.id.tv_taxi_passenger_number_back -> {deleteNumver()}
|
||||
R.id.tv_taxi_passenger_number_first -> {selectIndex(0)}
|
||||
R.id.tv_taxi_passenger_number_second -> {selectIndex(1)}
|
||||
R.id.tv_taxi_passenger_number_third -> {selectIndex(2)}
|
||||
R.id.tv_taxi_passenger_number_fourth -> {selectIndex(3)}
|
||||
R.id.tv_taxi_passenger_number_submit -> {checkAndCommit()}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkAndCommit() {
|
||||
val numberStr = "${numSelect[0]}${numSelect[1]}${numSelect[2]}${numSelect[3]}"
|
||||
if(!phone.endsWith(numberStr)){
|
||||
ToastUtils.showLong("请输入正确的手机尾号")
|
||||
return
|
||||
}
|
||||
onCheckPhoneAndUpdateStatusListener?.onCheckPhoneAndUpdateOrderStatus(numberStr)
|
||||
}
|
||||
|
||||
private fun selectIndex(i: Int) {
|
||||
index = i
|
||||
changeStyle()
|
||||
}
|
||||
|
||||
private fun showNumver(number: Int) {
|
||||
if (index in 0..3) {
|
||||
numSelect[index] = number
|
||||
numSelectTextView[index]!!.text = number.toString()
|
||||
if(index!=3){
|
||||
index++
|
||||
}
|
||||
changeStyle()
|
||||
}
|
||||
}
|
||||
|
||||
private fun deleteNumver() {
|
||||
if (index in 0..3) {
|
||||
if(numSelect[index]==null){
|
||||
if(index!=0){
|
||||
index--
|
||||
}
|
||||
changeStyle()
|
||||
return
|
||||
}
|
||||
numSelect[index] = null
|
||||
numSelectTextView[index]!!.text = ""
|
||||
}
|
||||
}
|
||||
|
||||
private fun changeStyle() {
|
||||
numSelectTextView.forEachIndexed { indexIn, textView ->
|
||||
if(indexIn==index){
|
||||
numSelectTextView[index]!!.setBackgroundResource(R.drawable.bg_taxi_p_checked_input_background)
|
||||
numSelectTextView[index]!!.setTextColor(resources.getColor(R.color.taxi_p_check_keyboard_input_field_checked))
|
||||
numSelectTextView[index]!!.setShadowLayer(0f,0f,0f,
|
||||
resources.getColor(R.color.taxi_p_check_keyboard_input_field_checked_text_shadow))
|
||||
}else{
|
||||
numSelectTextView[indexIn]!!.setBackgroundResource(R.drawable.bg_taxi_p_check_input_background)
|
||||
numSelectTextView[indexIn]!!.setTextColor(resources.getColor(R.color.taxi_p_check_keyboard_input_field))
|
||||
numSelectTextView[indexIn]!!.setShadowLayer(20f,0f,2f,
|
||||
resources.getColor(R.color.taxi_p_check_keyboard_input_field_checked_text_shadow))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun setData(
|
||||
startSiteAddr: String?,
|
||||
endSiteAddr: String?,
|
||||
passengerNum: String?,
|
||||
carNumber: String?,
|
||||
phone: String?
|
||||
) {
|
||||
this.phone = phone?:""
|
||||
val sb = SpannableStringBuilder("乘客数:$passengerNum 位") // 包装字体内容
|
||||
sb.setSpan(
|
||||
TextAppearanceSpan("default",
|
||||
Typeface.NORMAL,100,
|
||||
resources.getColorStateList(R.color.taxi_p_check_passenger_number) ,null ),
|
||||
4, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE)
|
||||
tvPassengerCount.text = sb
|
||||
tvPassengerStart.text = "起 点 : $startSiteAddr"
|
||||
tvPassengerEnd.text = "终 点 : $endSiteAddr"
|
||||
tvTaxiNumber.text = "蘑菇 " + carNumber + "为您服务"
|
||||
for(i in numSelect.indices){
|
||||
numSelect[i] = null
|
||||
}
|
||||
numSelectTextView.forEach {
|
||||
it?.text = ""
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val TAG = "TaxiPassengerCheckView"
|
||||
}
|
||||
|
||||
init {
|
||||
try {
|
||||
initView(context)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -226,10 +226,12 @@ public class TaxiPassengerMapDirectionView
|
||||
//设置线段纹理
|
||||
PolylineOptions polylineOptions = new PolylineOptions();
|
||||
polylineOptions.addAll(mCoordinatesLatLng);
|
||||
polylineOptions.colorValues(colorList); // 1FC3FF -> 57ABFF
|
||||
polylineOptions.useGradient(true);
|
||||
//polylineOptions.colorValues(colorList); // 1FC3FF -> 57ABFF
|
||||
//加上这个属性,表示使用渐变线
|
||||
//polylineOptions.useGradient(true);
|
||||
polylineOptions.width(10);
|
||||
polylineOptions.lineCapType(PolylineOptions.LineCapType.LineCapRound);
|
||||
polylineOptions.setCustomTexture(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_arrow));
|
||||
|
||||
// 绘制线
|
||||
mPolyline = mAMap.addPolyline(polylineOptions);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:duration="500" android:fromAlpha="0" android:toAlpha="1" />
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android" android:startOffset="500" >
|
||||
<translate
|
||||
android:duration="1000"
|
||||
android:fromXDelta="-110%"
|
||||
android:toXDelta="0"/>
|
||||
</set>
|
||||
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 480 B |
|
After Width: | Height: | Size: 372 B |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 915 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 375 B |
|
After Width: | Height: | Size: 261 B |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 480 B |
|
After Width: | Height: | Size: 372 B |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 915 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 375 B |
|
After Width: | Height: | Size: 261 B |
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="#E0263D65"/>
|
||||
<corners android:radius="@dimen/dp_46"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient android:startColor="#4C82BBFF" android:centerColor="#B8DFFF"
|
||||
android:endColor="#4C82BBFF"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners android:topRightRadius="@dimen/dp_100" android:bottomRightRadius="@dimen/dp_100" />
|
||||
<gradient android:startColor="#FCDD18" android:endColor="#F8B70A" android:angle="270"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="#4DFFFFFF"/>
|
||||
<corners android:radius="40px"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="#4DFFFFFF"/>
|
||||
<corners android:radius="@dimen/dp_20"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="#FF4580FF"/>
|
||||
<corners android:radius="@dimen/dp_20"/>
|
||||
</shape>
|
||||
@@ -5,52 +5,105 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/taxi_p_arrive_end_panel_bg"
|
||||
android:id="@+id/cl_content"
|
||||
tools:ignore="MissingDefaultResource">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/arrived_title"
|
||||
<com.mogo.och.common.module.wigets.OCHBorderShadowLayout
|
||||
android:id="@+id/och_shadow_layout"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/dp_88"
|
||||
android:layout_marginBottom="@dimen/dp_190"
|
||||
android:includeFontPadding="false"
|
||||
android:text="@string/taxi_p_arrived_title"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/taxi_p_arrived_end_tv_size"
|
||||
android:layout_marginStart="@dimen/dp_109"
|
||||
android:layout_marginBottom="@dimen/dp_110"
|
||||
app:bgColor="@color/taxi_p_map_bg"
|
||||
app:blurRadius="@dimen/dp_60"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent" />
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:shadowColor="#80000000"
|
||||
app:shadowRadius="60px"
|
||||
app:shadow_position="outer"
|
||||
app:xOffset="0px"
|
||||
app:yOffset="0px">
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="@dimen/dp_867"
|
||||
android:layout_height="@dimen/dp_657"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:background="@drawable/bg_taxi_p_arrived_info"
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
<ImageView
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:src="@drawable/taxi_p_arrived_end_light"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
<ImageView
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:src="@drawable/taxi_p_arrived_end_light"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:rotation="180"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
<View
|
||||
android:id="@+id/bg_taxi_p_arrived_info_yello_v"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:background="@drawable/bg_taxi_p_arrived_info_yello_v"
|
||||
android:layout_marginTop="@dimen/dp_86"
|
||||
android:layout_width="@dimen/dp_12"
|
||||
android:layout_height="@dimen/dp_140"/>
|
||||
<TextView
|
||||
android:id="@+id/arrived_end_station_title"
|
||||
app:layout_constraintTop_toTopOf="@+id/bg_taxi_p_arrived_info_yello_v"
|
||||
app:layout_constraintStart_toEndOf="@+id/bg_taxi_p_arrived_info_yello_v"
|
||||
android:text="已到达"
|
||||
android:layout_marginStart="@dimen/dp_41"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/sp_46"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/arrived_end_station"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/dp_30"
|
||||
android:includeFontPadding="false"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/taxi_p_arrived_end_tv_size"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/arrived_title"
|
||||
app:layout_constraintLeft_toRightOf="@+id/arrived_title"
|
||||
app:layout_constraintTop_toTopOf="@+id/arrived_title" />
|
||||
<TextView
|
||||
android:id="@+id/arrived_end_station"
|
||||
android:layout_width="0dp"
|
||||
android:maxLines="2"
|
||||
android:ellipsize="end"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@+id/arrived_end_station_title"
|
||||
app:layout_constraintStart_toStartOf="@+id/arrived_end_station_title"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:layout_marginTop="@dimen/dp_31"
|
||||
android:includeFontPadding="false"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/dp_56"
|
||||
android:textStyle="bold"
|
||||
tools:text="环球贸易中心-北门"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/arrived_end_tip"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_30"
|
||||
android:includeFontPadding="false"
|
||||
android:text="@string/taxi_p_arrived_end_tips"
|
||||
android:textColor="@color/taxi_p_arrive_end_tip_color"
|
||||
android:textSize="@dimen/taxi_p_arrived_end_tip_size"
|
||||
app:layout_constraintLeft_toLeftOf="@+id/arrived_title"
|
||||
app:layout_constraintTop_toBottomOf="@+id/arrived_title" />
|
||||
<View
|
||||
android:id="@+id/v_line"
|
||||
app:layout_constraintTop_toBottomOf="@+id/arrived_end_station"
|
||||
android:layout_marginTop="@dimen/dp_49"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:layout_marginStart="@dimen/dp_60"
|
||||
android:layout_marginEnd="@dimen/dp_60"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="1px"
|
||||
android:background="@drawable/bg_taxi_p_arrived_info_line" />
|
||||
|
||||
<View
|
||||
android:layout_width="@dimen/dp_18"
|
||||
android:layout_height="0dp"
|
||||
android:background="@color/taxi_p_arrive_end_bg_line_color"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/arrived_end_tip"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/arrived_title" />
|
||||
<TextView
|
||||
android:id="@+id/tv_please_score"
|
||||
app:layout_constraintStart_toStartOf="@+id/arrived_end_station"
|
||||
app:layout_constraintTop_toBottomOf="@+id/v_line"
|
||||
android:layout_marginTop="@dimen/dp_52"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/sp_46"
|
||||
android:text="请对本次行程评分"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</com.mogo.och.common.module.wigets.OCHBorderShadowLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -42,6 +42,7 @@
|
||||
app:layout_constraintLeft_toLeftOf="parent" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_temp"
|
||||
android:layout_width="300px"
|
||||
android:layout_height="76px"
|
||||
android:layout_gravity="center"
|
||||
|
||||
@@ -0,0 +1,375 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/cl_contain"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/taxi_p_passenger_check_panel_bg"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
tools:ignore="MissingDefaultResource">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="@dimen/dp_90"
|
||||
android:layout_height="@dimen/dp_90"
|
||||
android:layout_marginStart="@dimen/dp_63"
|
||||
android:layout_marginTop="@dimen/dp_132"
|
||||
android:src="@drawable/taxi_p_passenger_check_logo"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_hello"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_129"
|
||||
android:layout_marginTop="@dimen/dp_406"
|
||||
android:padding="@dimen/dp_40"
|
||||
android:shadowColor="@color/taxi_p_check_hello_text_color"
|
||||
android:shadowDy ="4"
|
||||
android:shadowRadius="40"
|
||||
android:text="@string/taxi_p_check_hello_text"
|
||||
android:textColor="@color/taxi_autopilot_text_color_normal"
|
||||
android:textSize="@dimen/sp_120"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_welcome_message"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_3"
|
||||
android:shadowColor="@color/taxi_p_check_hello_small_text_color"
|
||||
android:paddingStart="@dimen/dp_40"
|
||||
android:paddingEnd="@dimen/dp_20"
|
||||
android:paddingTop="@dimen/dp_20"
|
||||
android:paddingBottom="@dimen/dp_20"
|
||||
android:shadowDy ="2"
|
||||
android:shadowRadius="20"
|
||||
android:text="@string/taxi_p_check_hello_small_text"
|
||||
android:textColor="@color/taxi_autopilot_text_color_normal"
|
||||
android:textSize="@dimen/sp_46"
|
||||
app:layout_constraintStart_toStartOf="@+id/tv_hello"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_hello" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_passenger_count"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_10"
|
||||
android:layout_marginTop="@dimen/dp_239"
|
||||
tools:text="乘客数:2位"
|
||||
android:shadowColor="@color/taxi_p_check_hello_small_text_color"
|
||||
android:shadowDy ="2"
|
||||
android:shadowRadius="20"
|
||||
android:paddingStart="@dimen/dp_40"
|
||||
android:paddingEnd="@dimen/dp_20"
|
||||
android:paddingTop="@dimen/dp_20"
|
||||
android:paddingBottom="@dimen/dp_20"
|
||||
android:textColor="@color/taxi_autopilot_text_color_normal"
|
||||
android:textSize="@dimen/sp_46"
|
||||
app:layout_constraintStart_toStartOf="@+id/tv_welcome_message"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_welcome_message" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_passenger_start"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_44"
|
||||
android:layout_marginTop="@dimen/dp_86"
|
||||
tools:text="起 点 : 衡山科学城"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:textColor="@color/taxi_autopilot_text_color_normal"
|
||||
android:textSize="@dimen/sp_46"
|
||||
app:layout_constraintEnd_toStartOf="@+id/och_shadow_layout"
|
||||
app:layout_constraintStart_toEndOf="@+id/iv_passenger_start_boll"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_passenger_count" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_passenger_start_boll"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_40"
|
||||
android:src="@drawable/taxi_p_passenger_check_start_boll"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/tv_passenger_start"
|
||||
app:layout_constraintStart_toStartOf="@+id/tv_passenger_count"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_passenger_start" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_passenger_start_end_line"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/taxi_p_passenger_check_start_end_line"
|
||||
app:layout_constraintEnd_toEndOf="@+id/iv_passenger_start_boll"
|
||||
app:layout_constraintStart_toStartOf="@+id/iv_passenger_start_boll"
|
||||
app:layout_constraintTop_toBottomOf="@+id/iv_passenger_start_boll" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_passenger_end_boll"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/taxi_p_passenger_check_end_boll"
|
||||
app:layout_constraintEnd_toEndOf="@+id/iv_passenger_start_end_line"
|
||||
app:layout_constraintStart_toStartOf="@+id/iv_passenger_start_end_line"
|
||||
app:layout_constraintTop_toBottomOf="@+id/iv_passenger_start_end_line" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_passenger_end"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_44"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
tools:text="终 点 : 石鼓收费站"
|
||||
android:textColor="@color/taxi_autopilot_text_color_normal"
|
||||
android:textSize="@dimen/sp_46"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/iv_passenger_end_boll"
|
||||
app:layout_constraintStart_toEndOf="@+id/iv_passenger_end_boll"
|
||||
app:layout_constraintEnd_toStartOf="@+id/och_shadow_layout"
|
||||
app:layout_constraintTop_toTopOf="@+id/iv_passenger_end_boll" />
|
||||
|
||||
<com.mogo.och.common.module.wigets.OCHBorderShadowLayout
|
||||
android:id="@+id/och_shadow_layout"
|
||||
android:layout_width="929px"
|
||||
android:layout_height="1143px"
|
||||
android:layout_marginEnd="155px"
|
||||
android:layout_marginBottom="231px"
|
||||
android:orientation="vertical"
|
||||
app:bgColor="@color/transparent_white_30"
|
||||
app:blurRadius="@dimen/dp_60"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:shadowColor="@color/taxi_p_check_keyboard_bg"
|
||||
app:shadowRadius="60px"
|
||||
app:xOffset="0px"
|
||||
app:yOffset="0px">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@null">
|
||||
|
||||
<com.mogo.och.common.module.wigets.OCHShapeBlurView
|
||||
android:id="@+id/och_shape_blur"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clickable="false"
|
||||
app:och_realtime_onece="true"
|
||||
app:och_realtime_end_color="#BF6AA2D7"
|
||||
app:och_realtime_radius="@dimen/dp_60"
|
||||
app:och_realtime_start_color="#BFE0E8FF" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_robot"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_45"
|
||||
android:layout_marginTop="@dimen/dp_84"
|
||||
android:src="@drawable/taxi_p_passenger_check_robot"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_small_mogo"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_28"
|
||||
android:layout_marginTop="@dimen/dp_88"
|
||||
android:text="@string/taxi_p_check_small_mogo"
|
||||
android:textColor="@color/taxi_p_check_keyboard_samll_mogo_color"
|
||||
android:textSize="42px"
|
||||
app:layout_constraintStart_toEndOf="@+id/iv_robot"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_number"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_14"
|
||||
tools:text="蘑菇 3291号为您服务"
|
||||
android:textColor="@color/taxi_p_check_keyboard_samll_mogo_color"
|
||||
android:textSize="@dimen/dp_24"
|
||||
app:layout_constraintStart_toStartOf="@+id/tv_small_mogo"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_small_mogo" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_84"
|
||||
android:layout_marginTop="@dimen/dp_129"
|
||||
android:text="@string/taxi_p_check_input_phone_tail_title"
|
||||
android:textColor="@color/taxi_p_check_keyboard_samll_mogo_color"
|
||||
android:textSize="@dimen/sp_36"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_taxi_number" />
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_first"
|
||||
android:layout_width="@dimen/dp_150"
|
||||
android:layout_height="@dimen/dp_150"
|
||||
android:layout_marginTop="@dimen/dp_41"
|
||||
android:layout_marginEnd="@dimen/dp_38"
|
||||
style="@style/och_check_number_checked"
|
||||
android:backgroundTintMode="screen"
|
||||
android:gravity="center"
|
||||
android:textSize="@dimen/dp_76"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_second"
|
||||
app:layout_constraintHorizontal_chainStyle="packed"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tv_taxi_passenger_number_title" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_second"
|
||||
android:layout_marginEnd="@dimen/dp_38"
|
||||
style="@style/och_check_number"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_third"
|
||||
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_first"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_first" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_third"
|
||||
android:layout_marginEnd="@dimen/dp_38"
|
||||
style="@style/och_check_number"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_fourth"
|
||||
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_second"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_second" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_fourth"
|
||||
style="@style/och_check_number"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_third"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_third" />
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_nine"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:layout_marginBottom="@dimen/dp_98"
|
||||
style="@style/och_check_number_keyboard"
|
||||
android:text="9"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_zero"
|
||||
app:layout_constraintHorizontal_chainStyle="packed"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_zero"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:text="0"
|
||||
style="@style/och_check_number_keyboard"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_back"
|
||||
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_nine"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_nine" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_back"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:background="@drawable/bg_taxi_p_keyboard_background"
|
||||
android:text="x"
|
||||
style="@style/och_check_number_keyboard"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_submit"
|
||||
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_zero"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_nine" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_submit"
|
||||
style="@style/och_check_number_keyboard"
|
||||
android:background="@drawable/bg_taxi_p_keyboard_submit_background"
|
||||
android:text="确定"
|
||||
android:textColor="@color/taxi_autopilot_text_color_normal"
|
||||
android:textSize="@dimen/sp_36"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_back"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_nine" />
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_five"
|
||||
style="@style/och_check_number_keyboard"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:layout_marginBottom="@dimen/dp_30"
|
||||
android:text="5"
|
||||
app:layout_constraintBottom_toTopOf="@id/tv_taxi_passenger_number_nine"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_six"
|
||||
app:layout_constraintHorizontal_chainStyle="packed"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_six"
|
||||
style="@style/och_check_number_keyboard"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:text="6"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_seven"
|
||||
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_five"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_five" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_seven"
|
||||
style="@style/och_check_number_keyboard"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:background="@drawable/bg_taxi_p_keyboard_background"
|
||||
android:text="7"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_eight"
|
||||
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_six"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_five" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_eight"
|
||||
style="@style/och_check_number_keyboard"
|
||||
android:text="8"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_seven"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_five" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_one"
|
||||
style="@style/och_check_number_keyboard"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:layout_marginBottom="@dimen/dp_30"
|
||||
android:text="1"
|
||||
app:layout_constraintBottom_toTopOf="@id/tv_taxi_passenger_number_five"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_two"
|
||||
app:layout_constraintHorizontal_chainStyle="packed"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_two"
|
||||
style="@style/och_check_number_keyboard"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:text="2"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_three"
|
||||
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_one"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_one" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_three"
|
||||
style="@style/och_check_number_keyboard"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:text="3"
|
||||
app:layout_constraintEnd_toStartOf="@+id/tv_taxi_passenger_number_four"
|
||||
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_two"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_one" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_taxi_passenger_number_four"
|
||||
style="@style/och_check_number_keyboard"
|
||||
android:text="4"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_three"
|
||||
app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_one" />
|
||||
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
||||
</com.mogo.och.common.module.wigets.OCHBorderShadowLayout>
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -38,4 +38,17 @@
|
||||
|
||||
<color name="taxi_p_map_bg">#00000000</color>
|
||||
|
||||
|
||||
<color name="taxi_p_check_passenger_number">#FFFFC836</color>
|
||||
<color name="taxi_p_check_keyboard_input_field">#FF282F62</color>
|
||||
<color name="taxi_p_check_keyboard_input_field_checked">#FFFFFF</color>
|
||||
<color name="taxi_p_check_keyboard_input_field_checked_text_shadow">#FFFFFF</color>
|
||||
|
||||
<color name="taxi_p_check_hello_text_color">#7020466F</color>
|
||||
<color name="taxi_p_check_hello_small_text_color">#8039388E</color>
|
||||
<color name="taxi_p_check_keyboard_bg">#B630347D</color>
|
||||
<color name="taxi_p_check_keyboard_samll_mogo_color">#151937</color>
|
||||
|
||||
|
||||
|
||||
</resources>
|
||||
@@ -24,4 +24,10 @@
|
||||
<string name="taxi_p_arrive_end_tts">已达到目的地,请从右侧下车,感谢乘坐\'蘑菇车联\'无人驾驶车</string>
|
||||
<string name="taxi_p_arrived_title">已到达</string>
|
||||
<string name="taxi_p_arrived_end_tips">感谢您使用蘑菇车联自动驾驶出行服务,期待下次与您相遇</string>
|
||||
|
||||
|
||||
<string name="taxi_p_check_hello_small_text">欢迎体验MOGO自动驾驶出租车</string>
|
||||
<string name="taxi_p_check_hello_text">Hello,您好</string>
|
||||
<string name="taxi_p_check_input_phone_tail_title">请输出手机号后4位:</string>
|
||||
<string name="taxi_p_check_small_mogo">小蘑菇</string>
|
||||
</resources>
|
||||
@@ -11,4 +11,33 @@
|
||||
<item name="android:textSize">32px</item>
|
||||
</style>
|
||||
|
||||
<style name="och_check_number_checked">
|
||||
<item name="android:background">@drawable/bg_taxi_p_checked_input_background</item>
|
||||
<item name="android:textColor">@color/taxi_p_check_keyboard_input_field_checked</item>
|
||||
</style>
|
||||
<style name="och_check_number">
|
||||
<item name="android:background">@drawable/bg_taxi_p_check_input_background</item>
|
||||
<item name="android:textColor">@color/taxi_p_check_keyboard_input_field</item>
|
||||
<item name="android:shadowColor">@color/taxi_p_check_keyboard_input_field_checked_text_shadow</item>
|
||||
<item name="android:shadowDy">2</item>
|
||||
<item name="android:shadowRadius">20</item>
|
||||
<item name="android:textSize">@dimen/dp_76</item>
|
||||
<item name="android:gravity">center</item>
|
||||
<item name="android:layout_width">@dimen/dp_150</item>
|
||||
<item name="android:layout_height">@dimen/dp_150</item>
|
||||
</style>
|
||||
|
||||
<style name="och_check_number_keyboard">
|
||||
<item name="android:layout_width">@dimen/dp_150</item>
|
||||
<item name="android:layout_height">@dimen/dp_80</item>
|
||||
<item name="android:background">@drawable/bg_taxi_p_keyboard_background</item>
|
||||
<item name="android:gravity">center</item>
|
||||
<item name="android:textColor">@color/taxi_p_check_keyboard_samll_mogo_color</item>
|
||||
<item name="android:textSize">@dimen/dp_56</item>
|
||||
</style>
|
||||
|
||||
<style name="och_window_anim_alpha">
|
||||
<item name="android:windowEnterAnimation">@anim/alpha_hide_show</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
@@ -134,7 +134,8 @@ interface TaxiServiceApiNew {
|
||||
*/
|
||||
@Headers( {"Content-type:application/json;charset=UTF-8"} )
|
||||
// @POST( "/autopilot-car-hailing/api/v1/driver/order/updateStatus" )
|
||||
@POST( "/autopilot-car-hailing/order/v2/driver/taxi/order/updateStatus" )
|
||||
// @POST( "/autopilot-car-hailing/order/v2/driver/taxi/order/updateStatus" )
|
||||
@POST( "/autopilot-car-hailing/order/v2/vehicle/taxi/driver/updateStatus" )
|
||||
Observable<BaseData> updateOrderStatus(@Header ("appId") String appId,@Header("ticket") String ticket,@Body OrderStatusUpdateReqBean data);
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,7 +4,6 @@ import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAX
|
||||
import static com.mogo.och.taxi.constant.TaxiConst.TIMER_START_AUTOPILOT_INTERVAL;
|
||||
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.AnimationDrawable;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
@@ -27,23 +26,20 @@ import com.mogo.commons.mvp.IView;
|
||||
import com.mogo.commons.mvp.MvpFragment;
|
||||
import com.mogo.commons.mvp.Presenter;
|
||||
import com.mogo.commons.voice.AIAssist;
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters;
|
||||
import com.mogo.eagle.core.data.config.HmiBuildConfig;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager;
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager;
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
|
||||
import com.mogo.eagle.core.function.call.map.CallerSmpManager;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.eagle.core.utilcode.mogo.toast.TipToast;
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
|
||||
import com.mogo.map.MogoMapUIController;
|
||||
import com.mogo.map.MogoMarkerManager;
|
||||
import com.mogo.map.listener.IMogoMapListener;
|
||||
import com.mogo.map.uicontroller.VisualAngleMode;
|
||||
import com.mogo.module.common.MogoApisHandler;
|
||||
import com.mogo.module.common.constants.DataTypes;
|
||||
import com.mogo.module.common.view.OnPreventFastClickListener;
|
||||
import com.mogo.och.taxi.R;
|
||||
@@ -111,13 +107,13 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
|
||||
// mSpeedView.setOnClickListener(v -> {
|
||||
// onAutopilotStatusChanged(false);
|
||||
// });
|
||||
mSpeedView.setOnLongClickListener(v -> {
|
||||
CallerLogger.INSTANCE.d(M_TAXI + TAG, "长按显示状态工具栏");
|
||||
Intent intent = new Intent();
|
||||
intent.putExtra("oper", 52);
|
||||
MogoApisHandler.getInstance().getApis().getIntentManagerApi().invoke("com.mogo.mock", intent);
|
||||
return true;
|
||||
});
|
||||
// mSpeedView.setOnLongClickListener(v -> {
|
||||
// CallerLogger.INSTANCE.d(M_TAXI + TAG, "长按显示状态工具栏");
|
||||
// Intent intent = new Intent();
|
||||
// intent.putExtra("oper", 52);
|
||||
// MogoApisHandler.getInstance().getApis().getIntentManagerApi().invoke("com.mogo.mock", intent);
|
||||
// return true;
|
||||
// });
|
||||
}
|
||||
|
||||
tvOperationStatus = findViewById(R.id.module_mogo_och_operation_status);
|
||||
@@ -175,82 +171,44 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
|
||||
// 如果能自动驾驶,就自动驾驶,不能就提示
|
||||
if (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) {
|
||||
restartAutopilot();
|
||||
}else {
|
||||
TipToast.shortTip(getResources().getString(R.string.module_och_taxi_auto_disable_tip));
|
||||
}
|
||||
// TODO: 2021/11/27 通过开启结果更新ui
|
||||
// onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING);
|
||||
}
|
||||
});
|
||||
|
||||
// debug下调用测试面板
|
||||
// if (DebugConfig.isDebug()) {
|
||||
// ctvAutopilotStatus.setOnLongClickListener(v -> {
|
||||
// if (groupTestPanel.getVisibility() == View.VISIBLE) {
|
||||
groupTestPanel.setVisibility(View.GONE);
|
||||
// } else {
|
||||
// groupTestPanel.setVisibility(View.VISIBLE);
|
||||
// }
|
||||
// return false;
|
||||
// });
|
||||
// }
|
||||
// debug下调用测试面板 长按速度值
|
||||
if (DebugConfig.isDebug()) {
|
||||
mSpeedView.setOnLongClickListener(v -> {
|
||||
if (groupTestPanel.getVisibility() == View.VISIBLE) {
|
||||
groupTestPanel.setVisibility(View.GONE);
|
||||
} else {
|
||||
groupTestPanel.setVisibility(View.VISIBLE);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState());
|
||||
|
||||
// 模拟 不可自动驾驶,目前场景是刚开机,adas还未和工控机连接
|
||||
// findViewById(R.id.btnAutopilotDisable).setOnClickListener(view ->
|
||||
// {
|
||||
// MogoApisHandler.getInstance().getApis()
|
||||
// .getAdasControllerApi()
|
||||
// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE, "不能使用");
|
||||
//// CallerLogger.INSTANCE.d(M_TAXI + "lianglihui","模拟 不可自动驾驶");
|
||||
// }
|
||||
// );
|
||||
findViewById(R.id.btnAutopilotDisable).setOnClickListener(view ->
|
||||
onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE)
|
||||
|
||||
);
|
||||
|
||||
// 模拟 可自动驾驶,工控机连接正常,且处于人工干预状态
|
||||
// findViewById(R.id.btnAutopilotEnable).setOnClickListener(view ->
|
||||
// {
|
||||
// MogoApisHandler.getInstance().getApis()
|
||||
// .getAdasControllerApi()
|
||||
// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE, "能使用");
|
||||
//
|
||||
//// CallerLogger.INSTANCE.d(M_TAXI + "lianglihui","模拟 可自动驾驶");
|
||||
// }
|
||||
// );
|
||||
findViewById(R.id.btnAutopilotEnable).setOnClickListener(view ->
|
||||
onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE)
|
||||
|
||||
);
|
||||
|
||||
// 模拟 自动驾驶能力,自动驾驶中,可能是停车,可能是行进,但是是机器在处理车的前进后退,不是人
|
||||
// findViewById(R.id.btnAutopilotRunning).setOnClickListener(view ->
|
||||
// {
|
||||
// MogoApisHandler.getInstance().getApis()
|
||||
// .getAdasControllerApi()
|
||||
// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING, "Running");
|
||||
//// CallerLogger.INSTANCE.d(M_TAXI + "lianglihui","模拟 自动驾驶能力");
|
||||
// }
|
||||
// );
|
||||
findViewById(R.id.btnAutopilotRunning).setOnClickListener(view ->
|
||||
onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING)
|
||||
|
||||
// 模拟 自动驾驶站
|
||||
// findViewById(R.id.btnAutopilotArrive).setOnClickListener(view ->
|
||||
// {
|
||||
// MogoApisHandler.getInstance().getApis()
|
||||
// .getAdasControllerApi().mockOchStatus(-1, "Arrived");
|
||||
//
|
||||
//// CallerLogger.INSTANCE.d(M_TAXI + "lianglihui","模拟 自动驾驶站");
|
||||
// }
|
||||
// );
|
||||
|
||||
// 模拟 站点下发工控
|
||||
findViewById(R.id.btnAutopilotControl).setOnClickListener(view ->
|
||||
{
|
||||
// CallerLogger.INSTANCE.d(M_TAXI + "lianglihui","模拟 站点下发工控");
|
||||
AutopilotControlParameters currentAutopilot = new AutopilotControlParameters();
|
||||
currentAutopilot.isSpeakVoice = true;
|
||||
// 万集东门站
|
||||
currentAutopilot.startLatLon = new AutopilotControlParameters.AutoPilotLonLat(40.194795425, 116.724476409);
|
||||
// 市政府前街18号
|
||||
currentAutopilot.endLatLon = new AutopilotControlParameters.AutoPilotLonLat(40.1939540844, 116.720067);
|
||||
// 订单运营类型 (9出租车,10小巴)
|
||||
currentAutopilot.vehicleType = 10;
|
||||
CallerLogger.INSTANCE.d(M_TAXI + TAG, "模拟 订单站点下发:" + currentAutopilot);
|
||||
CallerAutoPilotManager.INSTANCE.startAutoPilot(currentAutopilot);
|
||||
}
|
||||
);
|
||||
|
||||
tvOperationStatus.setOnClickListener(view -> {
|
||||
@@ -330,7 +288,7 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
|
||||
public void AutopilotStatusAnimchanged(int status) {
|
||||
// mAutopilotTv.setText(isInAutopilot?"自动驾驶":"开启自动驾驶");
|
||||
if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status) {
|
||||
ctvAutopilotStatus.setClickable(true);
|
||||
// ctvAutopilotStatus.setClickable(true);
|
||||
mAutopilotTv.setText("自动驾驶");
|
||||
mAutopilotTv.setTextColor(getResources().getColor(R.color.taxi_autopilot_text_color_normal));
|
||||
mAutopilotImage.setImageResource(R.drawable.taxi_ic_autopilot);
|
||||
@@ -344,7 +302,7 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
|
||||
animationDrawable.selectDrawable(0);
|
||||
animationDrawable.start();
|
||||
} else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == status) {
|
||||
ctvAutopilotStatus.setClickable(true);
|
||||
// ctvAutopilotStatus.setClickable(true);
|
||||
mAutopilotTv.setText("自动驾驶");
|
||||
mAutopilotTv.setTextColor(getResources().getColor(R.color.taxi_autopilot_text_color_normal));
|
||||
mAutopilotImage.setImageResource(R.drawable.taxi_ic_autopilot);
|
||||
@@ -355,7 +313,7 @@ public abstract class BaseTaxiTabFragment<V extends IView, P extends Presenter<V
|
||||
ctvAutopilotStatus.setBackground(getResources().getDrawable(R.drawable.taxi_autopilot_bg_selector));
|
||||
animationDrawable = null;
|
||||
} else {
|
||||
ctvAutopilotStatus.setClickable(false);
|
||||
// ctvAutopilotStatus.setClickable(false);
|
||||
mAutopilotTv.setText("自动驾驶");
|
||||
mAutopilotTv.setTextColor(getResources().getColor(R.color.taxi_autopilot_text_color_disable));
|
||||
mAutopilotImage.setImageResource(R.drawable.taxi_ic_autopilot_disable);
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
android:id="@+id/btnAutopilotDisable"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="模拟 不可自动驾驶"
|
||||
android:text="模拟 自动驾驶Disable"
|
||||
android:textSize="20sp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
@@ -209,7 +209,7 @@
|
||||
android:id="@+id/btnAutopilotEnable"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="模拟 中途人工干预"
|
||||
android:text="模拟 自动驾驶Enable"
|
||||
android:textSize="20sp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintRight_toRightOf="@id/btnAutopilotDisable"
|
||||
@@ -219,38 +219,18 @@
|
||||
android:id="@+id/btnAutopilotRunning"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="模拟 自动驾驶途中"
|
||||
android:text="模拟 自动驾驶Running"
|
||||
android:textSize="20sp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintRight_toRightOf="@id/btnAutopilotDisable"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnAutopilotEnable" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnAutopilotArrive"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="模拟 自动驾驶到站"
|
||||
android:textSize="20sp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintRight_toRightOf="@id/btnAutopilotDisable"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnAutopilotRunning" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnAutopilotControl"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="模拟 站点下发工控"
|
||||
android:textSize="20sp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintRight_toRightOf="@id/btnAutopilotDisable"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnAutopilotArrive" />
|
||||
|
||||
<androidx.constraintlayout.widget.Group
|
||||
android:id="@+id/groupTestPanel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:constraint_referenced_ids="btnAutopilotArrive,btnAutopilotDisable,btnAutopilotEnable,btnAutopilotRunning,btnAutopilotControl"
|
||||
app:constraint_referenced_ids="btnAutopilotDisable,btnAutopilotEnable,btnAutopilotRunning"
|
||||
tools:visibility="gone" />
|
||||
<FrameLayout
|
||||
android:id="@+id/module_mogo_och_navi_panel_container"
|
||||
|
||||
@@ -236,6 +236,7 @@
|
||||
android:text="@string/module_och_taxi_order_server_start"
|
||||
android:textColor="#4DFFFFFF"
|
||||
android:textSize="24sp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
||||
@@ -25,4 +25,6 @@
|
||||
<string name="module_och_taxi_order_server_start_auto_tip">无人驾驶已启动,请您系好安全带</string>
|
||||
<string name="module_och_taxi_order_arrive_end_200m_tip">即将到达目的地,请拿好随身物品,准备下车</string>
|
||||
<string name="module_och_taxi_order_auto_arrive_end_tip">已到达目的地,感谢乘坐\'蘑菇车联\'无人驾驶车,期待下次相遇</string>
|
||||
|
||||
<string name="module_och_taxi_auto_disable_tip">自动驾驶状态为0不可用</string>
|
||||
</resources>
|
||||
@@ -2,6 +2,7 @@ package com.mogo.launcher.stageone
|
||||
|
||||
import android.content.Context
|
||||
import com.mogo.commons.debug.DebugConfig
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo.appBuildTime
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo.workingBranchHash
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo.workingBranchName
|
||||
import com.mogo.eagle.core.data.constants.MoGoConfig
|
||||
@@ -31,6 +32,7 @@ class ConfigStartUp : AndroidStartup<Boolean>() {
|
||||
// 初始化构建APP的时候的分支及提交HASH,用于辅助定位问题
|
||||
workingBranchName = BuildConfig.WORKING_BRANCH_NAME
|
||||
workingBranchHash = BuildConfig.WORKING_BRANCH_HASH
|
||||
appBuildTime = BuildConfig.APP_BUILD_TIME
|
||||
// 使用与渠道配置一样的gps提供者提供的数据,app/productFlavors/fPadLenovo.gradle GPS_PROVIDER 0-Android系统,1-工控机,2-OBU
|
||||
FunctionBuildConfig.gpsProvider = BuildConfig.GPS_PROVIDER
|
||||
// 演示模式,上一次勾选的数据
|
||||
|
||||
@@ -20,16 +20,24 @@ import com.mogo.commons.debug.DebugConfig
|
||||
import com.mogo.commons.device.Devices
|
||||
import com.mogo.commons.network.NetConfigUtils
|
||||
import com.mogo.commons.network.Utils
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_CLOUD_CONNECT_FAIL
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_CLOUD_CONNECT_LOST
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_CLOUD_CONNECT_SUCCESS
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_CLOUD_SHOW
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_CONNECT_STATUS
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.function.call.analytics.AnalyticsManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
|
||||
import com.mogo.eagle.core.utilcode.util.DeviceIdUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ProcessUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ThreadPoolService
|
||||
import com.mogo.module.common.constants.HostConst
|
||||
import com.rousetime.android_startup.AndroidStartup
|
||||
import com.zhjt.service.chain.ChainLog
|
||||
import com.zhjt.service.chain.TracingConstants.Endpoint.Companion.PAD
|
||||
import java.lang.NumberFormatException
|
||||
|
||||
class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
@@ -104,7 +112,7 @@ class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
}
|
||||
// 设置AI云平台分配给三方应用的签名密钥,需要从AI云平台申请
|
||||
// 设置车机设备的唯一标识(这些表识必须是通过后台录入的设备)
|
||||
clientConfig.thirdPartyDeviceId = Utils.getDevicesId()
|
||||
clientConfig.thirdPartyDeviceId = DeviceIdUtils.getWidevineIDWithMd5(context)
|
||||
// 设置循环检测间隔时间(每隔2小时loop一次httpDnsConfig)
|
||||
clientConfig.loopCheckDelay = (60 * 60 * 2 * 1000).toLong()
|
||||
//设置长链接的secretKey //todo 通过SHA1和包名找中台服务生成,后续包名分渠道,需要做对应操作
|
||||
@@ -245,16 +253,41 @@ class HttpDnsStartUp : AndroidStartup<Boolean>() {
|
||||
MogoAiCloudSocketManager.getInstance(context).destroy()
|
||||
MogoAiCloudSocketManager.getInstance(context)
|
||||
.registerLifecycleListener(10020, object : IMogoLifecycleListener {
|
||||
|
||||
@ChainLog(
|
||||
linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS,
|
||||
linkCode = CHAIN_LINK_CLOUD_SHOW,
|
||||
endpoint = PAD,
|
||||
nodeAliasCode = CHAIN_ALIAS_CODE_CLOUD_CONNECT_FAIL,
|
||||
paramIndexes = [-1],
|
||||
clientPkFileName = "sn"
|
||||
)
|
||||
override fun onConnectFailure() {
|
||||
CallerLogger.d(SceneConstant.M_HMI + TAG, "socket-onConnectFailure")
|
||||
DebugConfig.setDownloadSnapshot(false)
|
||||
}
|
||||
|
||||
@ChainLog(
|
||||
linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS,
|
||||
linkCode = CHAIN_LINK_CLOUD_SHOW,
|
||||
endpoint = PAD,
|
||||
nodeAliasCode = CHAIN_ALIAS_CODE_CLOUD_CONNECT_SUCCESS,
|
||||
paramIndexes = [-1],
|
||||
clientPkFileName = "sn"
|
||||
)
|
||||
override fun onConnectSuccess() {
|
||||
CallerLogger.d(SceneConstant.M_HMI + TAG, "socket-onConnectSuccess")
|
||||
DebugConfig.setDownloadSnapshot(true)
|
||||
}
|
||||
|
||||
@ChainLog(
|
||||
linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS,
|
||||
linkCode = CHAIN_LINK_CLOUD_SHOW,
|
||||
endpoint = PAD,
|
||||
nodeAliasCode = CHAIN_ALIAS_CODE_CLOUD_CONNECT_LOST,
|
||||
paramIndexes = [-1],
|
||||
clientPkFileName = "sn"
|
||||
)
|
||||
override fun onConnectLost() {
|
||||
CallerLogger.d(SceneConstant.M_HMI + TAG, "socket-onConnectLost")
|
||||
DebugConfig.setDownloadSnapshot(false)
|
||||
|
||||
@@ -75,6 +75,6 @@ dependencies {
|
||||
implementation project(':core:mogo-core-utils')
|
||||
implementation 'org.greenrobot:eventbus:3.2.0'
|
||||
implementation 'com.android.support:multidex:1.0.3'
|
||||
implementation 'com.mogo.cloud:telematic:1.3.55'
|
||||
implementation 'com.mogo.cloud:telematic:1.3.56'
|
||||
implementation 'com.jcraft:jsch:0.1.55'
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.constants.MoGoConfig
|
||||
import com.mogo.eagle.core.data.constants.MogoServicePaths
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_MULTI_CONNECT
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_ADAS
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_ADAS_IMPL
|
||||
@@ -42,6 +43,7 @@ import com.mogo.telematic.server.netty.NettyTcpServer
|
||||
import com.zhidao.support.adas.high.AdasManager
|
||||
import com.zhidao.support.adas.high.AdasOptions
|
||||
import com.zhidao.support.adas.high.bean.IPCUpgradeInfo
|
||||
import com.zhidao.support.adas.high.chain.AdasChain.CHAIN_LINK_LOG_CONNECT_STATUS
|
||||
import com.zhidao.support.adas.high.common.Constants
|
||||
import com.zhidao.support.adas.high.common.Constants.IPC_CONNECTION_STATUS
|
||||
import com.zhidao.support.adas.high.common.CupidLogUtils
|
||||
@@ -100,10 +102,7 @@ class MoGoAutopilotProvider :
|
||||
platNumberArray.size, platNumberArray
|
||||
), channel
|
||||
) {
|
||||
CallerLogger.d(
|
||||
"$M_ADAS_IMPL$TAG",
|
||||
"司机端发送车牌号到乘客端是否成功:${it.isSuccess}"
|
||||
)
|
||||
invokeNettyConnResult("司机屏发送车牌号到乘客屏是否成功:${it.isSuccess}")
|
||||
}
|
||||
} else {
|
||||
CallerAutoPilotManager.getCarConfig()
|
||||
@@ -117,10 +116,12 @@ class MoGoAutopilotProvider :
|
||||
|
||||
override fun onStartServer() {
|
||||
ToastUtils.showShort("司机端服务启动成功!")
|
||||
invokeNettyConnResult("司机端服务启动成功!")
|
||||
}
|
||||
|
||||
override fun onStopServer() {
|
||||
ToastUtils.showLong("司机端服务停止!")
|
||||
invokeNettyConnResult("司机端服务停止!")
|
||||
}
|
||||
|
||||
override fun onChannelConnect(channel: Channel?) {
|
||||
@@ -142,6 +143,10 @@ class MoGoAutopilotProvider :
|
||||
override fun onChannelDisConnect(channel: Channel?) {
|
||||
CallerLogger.d("$M_ADAS_IMPL$TAG", "onChannelDisConnect")
|
||||
}
|
||||
|
||||
override fun onReceiveClientSign(channel: Channel?, sn: String?) {
|
||||
|
||||
}
|
||||
}, MoGoAiCloudClientConfig.getInstance().sn)
|
||||
} else {
|
||||
// 乘客端默认接收绘制全局路径+引导线
|
||||
@@ -249,7 +254,7 @@ class MoGoAutopilotProvider :
|
||||
}
|
||||
|
||||
override fun startAutoPilot(controlParameters: AutopilotControlParameters) {
|
||||
if (AdasManager.getInstance().ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED) {
|
||||
if (AdasManager.getInstance().ipcConnectionStatus == IPC_CONNECTION_STATUS.CONNECTED) {
|
||||
val invokeResult = AdasManager.getInstance().sendAutoPilotModeReq(1, 1, controlParameters.toRouteInfo())
|
||||
invokeAutoPilotResult(if (invokeResult) "自动驾驶调用成功" else "自动驾驶调用失败, socket 或者 rawPack 可能为空")
|
||||
} else {
|
||||
@@ -285,9 +290,6 @@ class MoGoAutopilotProvider :
|
||||
)
|
||||
}
|
||||
|
||||
override fun sendMessageToAutopilot(jsonString: String) {
|
||||
}
|
||||
|
||||
override fun cancelAutoPilot() {
|
||||
if (AdasManager.getInstance().ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED) {
|
||||
AdasManager.getInstance().sendAutoPilotModeReq(0, 1, null)
|
||||
@@ -472,50 +474,51 @@ class MoGoAutopilotProvider :
|
||||
}
|
||||
|
||||
private fun handleMsgFromServer(msg: MogoProtocolMsg?, channel: Channel) {
|
||||
try {
|
||||
msg?.let {
|
||||
when (it.protocolType) {
|
||||
NORMAL_DATA -> AdasManager.getInstance().decoderRaw(it.body)
|
||||
SYNC_MODE_STATUS -> {
|
||||
FunctionBuildConfig.isDemoMode = when (it.body[0].toInt()) {
|
||||
1 -> true
|
||||
else -> false
|
||||
}
|
||||
setDemoMode(FunctionBuildConfig.isDemoMode)
|
||||
}
|
||||
REQ_CAR_NUMBER -> {
|
||||
AppConfigInfo.plateNumber = String(msg.body)
|
||||
}
|
||||
else -> {
|
||||
msg?.let {
|
||||
when (it.protocolType) {
|
||||
NORMAL_DATA -> {
|
||||
try {
|
||||
AdasManager.getInstance().decoderRaw(it.body)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
CallerLogger.e("$M_ADAS_IMPL$TAG", "乘客屏解析数据过程中出现异常:${e.message}")
|
||||
}
|
||||
}
|
||||
SYNC_MODE_STATUS -> {
|
||||
FunctionBuildConfig.isDemoMode = when (it.body[0].toInt()) {
|
||||
1 -> true
|
||||
else -> false
|
||||
}
|
||||
setDemoMode(FunctionBuildConfig.isDemoMode)
|
||||
}
|
||||
REQ_CAR_NUMBER -> {
|
||||
AppConfigInfo.plateNumber = String(msg.body)
|
||||
invokeNettyConnResult("司机屏发送给乘客屏车牌号为:${AppConfigInfo.plateNumber}")
|
||||
}
|
||||
else -> {
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
CallerLogger.e("$M_ADAS_IMPL$TAG", "乘客屏解析数据流程中出现异常:${e.message}")
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleConnStatusWithServer(statusCode: Int, sign: String?) {
|
||||
when (statusCode) {
|
||||
ConnectState.STATUS_CONNECT_SUCCESS -> {
|
||||
CallerLogger.d("$M_ADAS_IMPL$TAG", "乘客端连接司机端服务成功! sign is:${sign}")
|
||||
ToastUtils.showShort("连接司机屏成功!")
|
||||
invokeNettyConnResult("乘客屏连接司机屏成功,司机屏SN为:$sign")
|
||||
// 连接成功后,乘客屏没拿到车牌号就像司机屏请求
|
||||
if (AppConfigInfo.plateNumber.isNullOrEmpty()) {
|
||||
var byteArray = byteArrayOf(0)
|
||||
NSDNettyManager.getInstance().sendMogoProtocolMsgToServer(
|
||||
MogoProtocolMsg(REQ_CAR_NUMBER, byteArray.size, byteArray)
|
||||
) {
|
||||
CallerLogger.d("$M_ADAS_IMPL$TAG", "请求车牌号数据发送是否成功:${it}")
|
||||
invokeNettyConnResult("乘客屏请求车牌号数据发送是否成功:${it}")
|
||||
}
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
ToastUtils.showLong("和司机端连接异常!")
|
||||
CallerLogger.d(
|
||||
"$M_ADAS_IMPL$TAG",
|
||||
"client statusCode is:${statusCode}"
|
||||
)
|
||||
invokeNettyConnResult("乘客屏和司机屏连接异常,状态码为:$statusCode")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -523,5 +526,18 @@ class MoGoAutopilotProvider :
|
||||
override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) {
|
||||
// 乘客屏才监听
|
||||
AppConfigInfo.plateNumber = carConfigResp.plateNumber
|
||||
invokeNettyConnResult("乘客屏车牌号:${carConfigResp.plateNumber}")
|
||||
}
|
||||
|
||||
@ChainLog(
|
||||
linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS,
|
||||
linkCode = CHAIN_LINK_ADAS,
|
||||
endpoint = TracingConstants.Endpoint.PAD,
|
||||
nodeAliasCode = CHAIN_ALIAS_CODE_MULTI_CONNECT,
|
||||
paramIndexes = [0],
|
||||
clientPkFileName = "sn"
|
||||
)
|
||||
private fun invokeNettyConnResult(status: String) {
|
||||
CallerLogger.d("$M_ADAS_IMPL$TAG", status)
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_C
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_RECORD
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_ROUTE
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_STATUS
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_TRAFFIC_LIGHT
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_TRAJECTORY
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_VEHICLE
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_ADAS_MESSAGE_CAR_STATE
|
||||
@@ -15,6 +16,8 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_C
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_ADAS
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_DATA_TRACKED
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_GNSSINFO
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_TRAFFIC_LIGHT
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_TRAJECTORY
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_WEB_SOCKET_VEHICLE
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
@@ -25,6 +28,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeAutopilotSNRequest
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager.invokeAutopilotCarConfigData
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarStatusListenerManager.invokeAutopilotCarStateData
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager.invokeAutopilotIdentifyDataUpdate
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager.invokeAutopilotRecordResult
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager.invokeAutopilotWarnMessage
|
||||
@@ -110,7 +114,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
|
||||
|
||||
//自车定位信息
|
||||
@ChainLog(
|
||||
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT,
|
||||
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_GNSSINFO,
|
||||
linkCode = CHAIN_LINK_ADAS,
|
||||
endpoint = PAD,
|
||||
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_CAR_STATE,
|
||||
@@ -220,11 +224,23 @@ class MoGoAdasListenerImpl : OnAdasListener {
|
||||
}
|
||||
|
||||
//感知红绿灯
|
||||
@ChainLog(
|
||||
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_TRAFFIC_LIGHT,
|
||||
linkCode = CHAIN_LINK_ADAS,
|
||||
endpoint = PAD,
|
||||
nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_TRAFFIC_LIGHT,
|
||||
paramIndexes = [0, 1],
|
||||
clientPkFileName = "sn"
|
||||
)
|
||||
override fun onPerceptionTrafficLight(
|
||||
header: MessagePad.Header?,
|
||||
trafficLights: TrafficLightOuterClass.TrafficLights?
|
||||
) {
|
||||
|
||||
if(trafficLights != null){
|
||||
CallerAutopilotIdentifyListenerManager.invokeAutopilotPerceptionTrafficLight(
|
||||
trafficLights
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPredictionObstacleTrajectory(
|
||||
@@ -326,14 +342,6 @@ class MoGoAdasListenerImpl : OnAdasListener {
|
||||
|
||||
}
|
||||
|
||||
// override fun onSSHResult(info: com.zhidao.adas.client.ssh.SSHResult?) {
|
||||
// if (info != null && "docker restart autocar_default_1" == info.cmd) {
|
||||
// showDockerRebootResult(info.code, info.msg)
|
||||
// } else {
|
||||
// CallerLogger.w("$M_ADAS_IMPL$TAG", "onSSHResult : result info is null")
|
||||
// }
|
||||
// }
|
||||
|
||||
override fun onError(status: ProtocolStatus, bytes: ByteArray) {
|
||||
|
||||
}
|
||||
|
||||
@@ -75,6 +75,7 @@ class MoGoAdasMsgConnectStatusListenerImpl : OnAdasConnectStatusListener,
|
||||
} else if (ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.NOT_FOUND_ADDRESS) {
|
||||
CallerLogger.d("$M_ADAS_IMPL$TAG", "webSocket 找不到可用IP 传入的IP不可用或固定IP列表中所有IP不可用")
|
||||
}
|
||||
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().ipcConnStatus = ipcConnectionStatus
|
||||
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatusDescribe=reason
|
||||
CallerAutoPilotStatusListenerManager.invokeAutoPilotStatus()
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.mogo.eagle.core.function.bindingcar;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
|
||||
@@ -10,6 +9,7 @@ import com.mogo.eagle.core.data.constants.MogoServicePaths;
|
||||
import com.mogo.eagle.core.function.api.bindingcar.BindingcarCallBack;
|
||||
import com.mogo.eagle.core.function.api.bindingcar.IMoGoBindingcarProvider;
|
||||
import com.mogo.eagle.core.function.bindingcar.network.BindingcarNetWorkManager;
|
||||
import com.mogo.eagle.core.function.ipcupgrade.IPCUpgradeManager;
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -34,12 +34,13 @@ public class BindingcarProvider implements IMoGoBindingcarProvider {
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
|
||||
IPCUpgradeManager.Companion.getINSTANCE().destroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Context context) {
|
||||
mContext = context;
|
||||
IPCUpgradeManager.Companion.getINSTANCE().initServer(context);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -50,18 +51,14 @@ public class BindingcarProvider implements IMoGoBindingcarProvider {
|
||||
@Override
|
||||
public void getBindingcarInfo(String macAddress) {
|
||||
mAddress = macAddress;
|
||||
if (HmiBuildConfig.isShowSnBindingView) {
|
||||
if (getScreenType() == 1) {
|
||||
BindingcarNetWorkManager.getInstance().getBindingcarInfo(mContext, macAddress, getScreenType());
|
||||
}
|
||||
if (HmiBuildConfig.isShowSnBindingView) { //TODO 需要验证
|
||||
// BindingcarNetWorkManager.getInstance().getBindingcarInfo(mContext, macAddress, getScreenType());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void modifyCarInfo(BindingcarCallBack callBack) {
|
||||
if (getScreenType() == 1) {
|
||||
BindingcarNetWorkManager.getInstance().modifyBindingcar(mAddress, callBack, getScreenType());
|
||||
}
|
||||
// BindingcarNetWorkManager.getInstance().modifyBindingcar(mAddress, callBack, getScreenType());
|
||||
}
|
||||
|
||||
|
||||
@@ -71,9 +68,9 @@ public class BindingcarProvider implements IMoGoBindingcarProvider {
|
||||
screenType = 1; //司机屏
|
||||
}
|
||||
|
||||
// if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
|
||||
// screenType = 2; //乘客屏
|
||||
// }
|
||||
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
|
||||
screenType = 2; //乘客屏
|
||||
}
|
||||
return screenType;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
|
||||
import com.mogo.commons.AbsMogoApplication;
|
||||
import com.mogo.commons.constants.SharedPrefsConstants;
|
||||
import com.mogo.eagle.core.data.bindingcar.BindingcarInfo;
|
||||
import com.mogo.eagle.core.data.bindingcar.CarInfo;
|
||||
@@ -14,6 +15,7 @@ import com.mogo.eagle.core.network.MoGoRetrofitFactory;
|
||||
import com.mogo.eagle.core.network.utils.GsonUtil;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr;
|
||||
import com.mogo.eagle.core.utilcode.util.DeviceIdUtils;
|
||||
import com.mogo.eagle.core.utilcode.util.GsonUtils;
|
||||
import com.mogo.module.common.constants.HostConst;
|
||||
|
||||
@@ -37,7 +39,7 @@ public class BindingcarNetWorkManager {
|
||||
private static final String TAG = "BindingcarNetWorkManager";
|
||||
|
||||
private BindingcarNetWorkManager() {
|
||||
mBindingcarApiService = MoGoRetrofitFactory.getInstance(HostConst.BINDING_SN_HOST)
|
||||
mBindingcarApiService = MoGoRetrofitFactory.getInstance(HostConst.BINDING_SN_HOST_TEST)
|
||||
.create(BindingcarApiService.class);
|
||||
}
|
||||
|
||||
@@ -54,12 +56,17 @@ public class BindingcarNetWorkManager {
|
||||
|
||||
|
||||
/**
|
||||
* 获取绑定的车辆信息
|
||||
* 获取绑定的车辆信息 TODO
|
||||
*
|
||||
* @param macAddress mac地址
|
||||
*/
|
||||
public void getBindingcarInfo(Context context, String macAddress, int screenType) {
|
||||
String sn = MoGoAiCloudClientConfig.getInstance().getSn();
|
||||
String sn = DeviceIdUtils.getWidevineIDWithMd5(AbsMogoApplication.getApp());
|
||||
// String macAddress = "48:b0:2d:3a:bc:7";
|
||||
// String sn = "X20202203105S688HZ";
|
||||
// int screenType = 1;
|
||||
|
||||
Log.d("liyz", "getBindingcarInfo --- sn = " + sn + "--macAddress = " +macAddress + "--screenType = " + screenType);
|
||||
BindingcarRequest request = new BindingcarRequest(macAddress, sn, screenType);
|
||||
RequestBody requestBody = RequestBody.create(MediaType.get("application/json;charset=UTF-8"), GsonUtil.jsonFromObject(request));
|
||||
mBindingcarApiService.getBindingcarInfo(token, requestBody)
|
||||
@@ -75,13 +82,13 @@ public class BindingcarNetWorkManager {
|
||||
if (info != null && info.getData() != null) {
|
||||
CallerLogger.INSTANCE.d(TAG, "getBindingcarInfo onNext info.getData() =" + info.getData().toString());
|
||||
Log.d("liyz", "getBindingcarInfo onNext info.getData() =" + info.getData().toString() + "--compare = " + info.getData().getCompare());
|
||||
if (info.getData().getCompare() == 0) {
|
||||
if (info.getData().getCompare().equals(0)) {
|
||||
CallerHmiManager.INSTANCE.showBindingcarDialog();
|
||||
} else if (info.getData().getCompare() == 3) {
|
||||
} else if (info.getData().getCompare().equals(3)) {
|
||||
CallerHmiManager.INSTANCE.showModifyBindingcarDialog();
|
||||
}
|
||||
|
||||
SharedPrefsMgr.getInstance(context).putString(SharedPrefsConstants.CAR_INFO, GsonUtils.toJson(info.data));
|
||||
SharedPrefsMgr.getInstance(context).putString(SharedPrefsConstants.CAR_INFO, GsonUtils.toJson(info.getData()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,6 +100,7 @@ public class BindingcarNetWorkManager {
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
Log.d("liyz", "getBindingcarInfo onComplete -------- ");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -103,7 +111,9 @@ public class BindingcarNetWorkManager {
|
||||
* mac: 48:b0:2d:3a:9c:19
|
||||
*/
|
||||
public void modifyBindingcar(String macAddress, BindingcarCallBack callBack, int screenType) {
|
||||
String sn = MoGoAiCloudClientConfig.getInstance().getSn();
|
||||
// String sn = MoGoAiCloudClientConfig.getInstance().getSn();
|
||||
String sn = DeviceIdUtils.getWidevineIDWithMd5(AbsMogoApplication.getApp());
|
||||
Log.d("liyz", "modifyBindingcar --- sn = " + sn + "---macAddress = " + macAddress);
|
||||
BindingcarRequest request = new BindingcarRequest(macAddress, sn, screenType);
|
||||
RequestBody requestBody = RequestBody.create(MediaType.get("application/json;charset=UTF-8"), GsonUtil.jsonFromObject(request));
|
||||
mBindingcarApiService.modifyBindingcarInfo(token, requestBody)
|
||||
@@ -120,6 +130,8 @@ public class BindingcarNetWorkManager {
|
||||
callBack.callBackResult(info);
|
||||
CallerLogger.INSTANCE.d(TAG, "modifyBindingcar onNext code = " + info.code + "---msg = " + info.msg + "--info.toString() = " + info.toString());
|
||||
Log.d("liyz", "modifyBindingcar onNext code = " + info.code + "---msg = " + info.msg + "--info.toString() = " + info.toString());
|
||||
} else {
|
||||
Log.e("liyz", "modifyBindingcar info == null");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.mogo.eagle.core.function.ipcupgrade
|
||||
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import com.mogo.aicloud.services.socket.IMogoOnMessageListener
|
||||
import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo
|
||||
import com.mogo.eagle.core.data.bindingcar.IPCUpgradeStateInfo
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
|
||||
/**
|
||||
* @author XuXinChao
|
||||
* @description 工控机镜像版本升级管理
|
||||
* @since: 2022/5/12
|
||||
*/
|
||||
class IPCUpgradeManager: IMogoOnMessageListener<IPCUpgradeStateInfo> ,
|
||||
IMoGoAutopilotStatusListener {
|
||||
|
||||
companion object{
|
||||
const val TAG ="IPCUpgradeManager"
|
||||
const val IPC_UPGRADE_MSG_TYPE = 50000
|
||||
val INSTANCE: IPCUpgradeManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED){
|
||||
IPCUpgradeManager()
|
||||
}
|
||||
}
|
||||
|
||||
private var mContext: Context? = null
|
||||
|
||||
fun initServer(context: Context){
|
||||
mContext = context
|
||||
//添加长链接监听
|
||||
MogoAiCloudSocketManager.getInstance(context)
|
||||
.registerOnMessageListener(IPC_UPGRADE_MSG_TYPE, this)
|
||||
// 添加 ADAS状态 监听
|
||||
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
|
||||
}
|
||||
|
||||
override fun target(): Class<IPCUpgradeStateInfo> {
|
||||
return IPCUpgradeStateInfo::class.java
|
||||
}
|
||||
|
||||
override fun onMsgReceived(obj: IPCUpgradeStateInfo?) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 自动驾驶状态信息
|
||||
* @param autoPilotStatusInfo 状态信息
|
||||
*/
|
||||
override fun onAutopilotStatusResponse(autoPilotStatusInfo: AutopilotStatusInfo) {
|
||||
|
||||
}
|
||||
|
||||
fun destroy(){
|
||||
//注销长链接监听
|
||||
MogoAiCloudSocketManager.getInstance(mContext)
|
||||
.unregisterLifecycleListener(IPC_UPGRADE_MSG_TYPE)
|
||||
// 移除 ADAS状态 监听
|
||||
CallerAutoPilotStatusListenerManager.removeListener(TAG)
|
||||
mContext = null
|
||||
}
|
||||
|
||||
}
|
||||
@@ -11,6 +11,7 @@ import com.mogo.eagle.core.function.check.net.CheckNetWork.checkNetWork
|
||||
import com.mogo.eagle.core.function.check.net.CheckResultData
|
||||
import com.mogo.eagle.core.function.check.view.CheckActivity
|
||||
import com.mogo.eagle.core.function.check.view.CheckDialog
|
||||
import com.mogo.eagle.core.function.report.IPCReportManager
|
||||
import com.mogo.eagle.core.utilcode.util.*
|
||||
import com.mogo.module.common.MogoApisHandler
|
||||
import com.mogo.service.statusmanager.IMogoStatusChangedListener
|
||||
@@ -31,6 +32,10 @@ class VehicleMonitoringManager : ICheckProvider, IMogoStatusChangedListener {
|
||||
private val mListeners: ConcurrentHashMap<String, IMogoCheckListener> = ConcurrentHashMap()
|
||||
private var hasTipShow = false //是否已经弹框提示
|
||||
var dialog: CheckDialog? = null
|
||||
|
||||
override val functionName: String
|
||||
get() = "VehicleMonitoringManager"
|
||||
|
||||
override fun init(context: Context) {
|
||||
mContext = context
|
||||
MogoApisHandler.getInstance().apis.statusManagerApi.registerStatusChangedListener(
|
||||
@@ -38,6 +43,8 @@ class VehicleMonitoringManager : ICheckProvider, IMogoStatusChangedListener {
|
||||
StatusDescriptor.MAIN_PAGE_RESUME,
|
||||
this
|
||||
)
|
||||
//开启工控机监控节点上报服务
|
||||
IPCReportManager.INSTANCE.initServer()
|
||||
}
|
||||
|
||||
override fun registerVehicleMonitoringListener(module: String, listener: IMogoCheckListener) {
|
||||
@@ -113,4 +120,10 @@ class VehicleMonitoringManager : ICheckProvider, IMogoStatusChangedListener {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
//停止工控机监控节点上报服务
|
||||
IPCReportManager.INSTANCE.destroy()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.mogo.eagle.core.function.report
|
||||
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.report.ReportEntity
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
|
||||
import com.mogo.eagle.core.utilcode.util.ThreadUtils
|
||||
import com.mogo.eagle.core.utilcode.util.TimeUtils
|
||||
import mogo_msg.MogoReportMsg
|
||||
|
||||
/**
|
||||
* @author XuXinChao
|
||||
* @description 工控机监控节点信息上报管理
|
||||
* @since: 2022/5/12
|
||||
*/
|
||||
class IPCReportManager : IMoGoAutopilotStatusListener {
|
||||
|
||||
private var ipcReportList = arrayListOf<ReportEntity>()
|
||||
|
||||
companion object{
|
||||
const val TAG ="IPCReportManager"
|
||||
val INSTANCE: IPCReportManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
|
||||
IPCReportManager()
|
||||
}
|
||||
}
|
||||
|
||||
fun initServer(){
|
||||
// 添加 ADAS状态 监听
|
||||
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
|
||||
}
|
||||
|
||||
/**
|
||||
*工控机监控节点上报
|
||||
*/
|
||||
override fun onAutopilotGuardian(guardianInfo: MogoReportMsg.MogoReportMessage?) {
|
||||
guardianInfo?.let{
|
||||
if(it.level=="error"){
|
||||
if(ipcReportList.size>20){
|
||||
ipcReportList.removeLast()
|
||||
}
|
||||
ipcReportList.add(0,
|
||||
ReportEntity(TimeUtils.millis2String(System.currentTimeMillis()),
|
||||
it.src,it.level,it.msg,it.code,it.resultList,it.actionsList))
|
||||
//当前不处于美化模式时,展示监控节点上报
|
||||
if(!FunctionBuildConfig.isDemoMode){
|
||||
CallerHmiManager.showIPCReportWindow(ipcReportList)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun destroy(){
|
||||
// 移除 ADAS状态 监听
|
||||
CallerAutoPilotStatusListenerManager.removeListener(TAG)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -24,5 +24,10 @@ class MogoLogCatchConst {
|
||||
* 本应用设置,关闭日志
|
||||
*/
|
||||
const val LOCAL_CONFIG_CLOSE_LOG = 4
|
||||
|
||||
/**
|
||||
* 上传本地缓存链路日志
|
||||
*/
|
||||
const val CACHE_TRACE_UPLOAD = 5
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,7 @@ import com.zhidao.loglib.bean.RemoteLogPushContent
|
||||
import com.zhidao.loglib.call.LogInfoManagerFactory
|
||||
import com.zhidao.loglib.core.ILogListener
|
||||
import com.zhidao.loglib.core.LogInfoManager
|
||||
import com.zhjt.mogo_core_function_devatools.logcatch.MogoLogCatchConst.Companion.CACHE_TRACE_UPLOAD
|
||||
import com.zhjt.mogo_core_function_devatools.logcatch.MogoLogCatchConst.Companion.LOCAL_CONFIG_CLOSE_LOG
|
||||
import com.zhjt.mogo_core_function_devatools.logcatch.MogoLogCatchConst.Companion.LOCAL_CONFIG_OPEN_LOG
|
||||
import com.zhjt.mogo_core_function_devatools.logcatch.MogoLogCatchConst.Companion.LOG_PUSH_TYPE
|
||||
@@ -103,6 +104,10 @@ object MogoLogCatchManager : IMogoOnMessageListener<RemoteLogPushContent>, Handl
|
||||
TipToast.longTip("云端下发关闭日志开关")
|
||||
closeLoggerLevel()
|
||||
}
|
||||
CACHE_TRACE_UPLOAD -> {
|
||||
TipToast.longTip("上传本地缓存链路日志")
|
||||
|
||||
}
|
||||
else -> {
|
||||
}
|
||||
}
|
||||
@@ -233,7 +238,7 @@ object MogoLogCatchManager : IMogoOnMessageListener<RemoteLogPushContent>, Handl
|
||||
val file = File(filePath)
|
||||
if (file.isFile) {
|
||||
CallerLogger.d("$M_DEVA$TAG", "uploadFile path : $filePath")
|
||||
// LogInfoManagerFactory.handleSingleUploadFile(filePath)
|
||||
LogInfoManagerFactory.handleSingleUploadFile(filePath)
|
||||
}else{
|
||||
CallerLogger.d("$M_DEVA$TAG", "file absPath : ${file.absolutePath}")
|
||||
}
|
||||
|
||||
@@ -4,7 +4,10 @@ import android.content.Context
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainLogParam
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.LogLevel
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
|
||||
import com.mogo.eagle.core.utilcode.util.DeviceUtils
|
||||
import com.mogo.eagle.core.utilcode.util.Utils
|
||||
@@ -33,20 +36,26 @@ class TraceManager {
|
||||
|
||||
// Trace过程中进行日志抓取,对日志进行配置
|
||||
fwBuildMap[ChainConstant.CHAIN_LINK_LOG_CONNECT_STATUS] =
|
||||
FwBuild(true, pkgName + ChainConstant.CHAIN_LINK_LOG_ADAS_INIT)
|
||||
FwBuild(true, -1,pkgName + ChainConstant.CHAIN_LINK_LOG_ADAS_INIT)
|
||||
fwBuildMap[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_GNSSINFO] =
|
||||
FwBuild(true, -1,pkgName + ChainConstant.CHAIN_LINK_LOG_ADAS_GNSS)
|
||||
fwBuildMap[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT] =
|
||||
FwBuild(true, pkgName + ChainConstant.CHAIN_LINK_LOG_ADAS_AUTO)
|
||||
FwBuild(true, -1,pkgName + ChainConstant.CHAIN_LINK_LOG_ADAS_AUTO)
|
||||
fwBuildMap[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_DATA_TRACKED] =
|
||||
FwBuild(false, pkgName + ChainConstant.CHAIN_LINK_LOG_ADAS_DATA_TRACK)
|
||||
FwBuild(false, 30,pkgName + ChainConstant.CHAIN_LINK_LOG_ADAS_DATA_TRACK)
|
||||
fwBuildMap[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_TRAJECTORY] =
|
||||
FwBuild(false, pkgName + ChainConstant.CHAIN_LINK_LOG_ADAS_TRAJECTORY)
|
||||
FwBuild(false, 30,pkgName + ChainConstant.CHAIN_LINK_LOG_ADAS_TRAJECTORY)
|
||||
fwBuildMap[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_VEHICLE] =
|
||||
FwBuild(false, pkgName + ChainConstant.CHAIN_LINK_LOG_ADAS_VEHICLE)
|
||||
FwBuild(false, 30,pkgName + ChainConstant.CHAIN_LINK_LOG_ADAS_VEHICLE)
|
||||
fwBuildMap[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_TRAFFIC_LIGHT] =
|
||||
FwBuild(false, 30,pkgName + ChainConstant.CHAIN_LINK_LOG_ADAS_TRAFFIC_LIGHT)
|
||||
|
||||
traceInfoCache[ChainConstant.CHAIN_LINK_LOG_CONNECT_STATUS] =
|
||||
ChainLogParam(true, "ADAS连接状态")
|
||||
traceInfoCache[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_GNSSINFO] =
|
||||
ChainLogParam(true, "ADAS自车定位")
|
||||
traceInfoCache[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT] =
|
||||
ChainLogParam(true, "ADAS自动驾驶链路(包含: 定位,自动驾驶状态,全局路径,到站提醒,节点状态,异常上报)")
|
||||
ChainLogParam(true, "ADAS自动驾驶链路(包含: 自动驾驶状态交互,全局路径,到站提醒,节点状态,异常上报)")
|
||||
traceInfoCache[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_DATA_TRACKED] =
|
||||
ChainLogParam(false, "ADAS感知物体")
|
||||
traceInfoCache[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_TRAJECTORY] =
|
||||
@@ -56,6 +65,14 @@ class TraceManager {
|
||||
|
||||
FileWriteManager.getInstance()
|
||||
.init(context, MoGoAiCloudClientConfig.getInstance().sn, pkgName, fwBuildMap)
|
||||
FileWriteManager.getInstance().registerListener { type ->
|
||||
val param = traceInfoCache[type]
|
||||
param?.let {
|
||||
it.record = false
|
||||
traceInfoCache[type] = it
|
||||
}
|
||||
CallerDevaToolsListenerManager.invokeDevaToolsFwThreadClose()
|
||||
}
|
||||
}
|
||||
|
||||
fun setTraceLogEnable(enable:Boolean){
|
||||
|
||||
@@ -11,9 +11,9 @@ import android.view.WindowManager.LayoutParams
|
||||
import android.view.animation.*
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.alibaba.android.arouter.facade.annotation.Route
|
||||
import com.mogo.commons.AbsMogoApplication
|
||||
import com.mogo.commons.mvp.MvpFragment
|
||||
import com.mogo.commons.voice.AIAssist
|
||||
import com.mogo.eagle.core.data.autopilot.AdUpgradeStateHelper
|
||||
import com.mogo.eagle.core.data.camera.CameraEntity
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.config.HmiBuildConfig
|
||||
@@ -47,6 +47,7 @@ import com.mogo.eagle.core.function.hmi.ui.camera.CameraListView
|
||||
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeBannerView
|
||||
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeNormalBannerView
|
||||
import com.mogo.eagle.core.function.hmi.ui.setting.DebugSettingView
|
||||
import com.mogo.eagle.core.function.hmi.ui.setting.IPCReportWindow
|
||||
import com.mogo.eagle.core.function.hmi.ui.setting.ReportListFloatWindow
|
||||
import com.mogo.eagle.core.function.hmi.ui.tools.AutoPilotAndCheckView
|
||||
import com.mogo.eagle.core.function.hmi.ui.widget.V2XNotificationView
|
||||
@@ -62,6 +63,7 @@ import kotlinx.coroutines.*
|
||||
import mogo_msg.MogoReportMsg
|
||||
import record_cache.RecordPanelOuterClass
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
|
||||
/**
|
||||
@@ -112,6 +114,8 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
|
||||
private var reportList = arrayListOf<ReportEntity>()
|
||||
//工控机上报列表悬浮窗
|
||||
private var reportListFloatWindow: ReportListFloatWindow?=null
|
||||
private var ipcReportWindow: IPCReportWindow?=null
|
||||
|
||||
|
||||
override fun vipIdentification(visible: Boolean) {
|
||||
ThreadUtils.runOnUiThread {
|
||||
@@ -210,13 +214,28 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
|
||||
ToastUtils.showShort("重启成功")
|
||||
} else {
|
||||
//重启失败
|
||||
msg?.let {
|
||||
msg.let {
|
||||
ToastUtils.showShort(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 展示工控机监控上报数据
|
||||
* @param reportList 上报数据列表
|
||||
*/
|
||||
override fun showIPCReportWindow(reportList: ArrayList<ReportEntity>) {
|
||||
ThreadUtils.runOnUiThread{
|
||||
if(ipcReportWindow==null){
|
||||
ipcReportWindow= activity?.let { IPCReportWindow(it) }
|
||||
ipcReportWindow?.showFloatWindow()
|
||||
AIAssist.getInstance(AbsMogoApplication.getApp()).speakTTSVoice("嘟")
|
||||
}
|
||||
ipcReportWindow?.refreshData(reportList)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置 V2X 通知 代理View
|
||||
*/
|
||||
|
||||
@@ -51,7 +51,8 @@ class ModifyBindingCarDialog(context: Context) : BaseFloatDialog(context), Lifec
|
||||
*/
|
||||
fun modifyBindingcar() {
|
||||
CallerBindingcarManager.getBindingcarProvider().modifyCarInfo {
|
||||
if (it.code == 200) {
|
||||
Log.e("liyz", "it.code == ${it.code}" )
|
||||
if (it.code != 205) {
|
||||
TipToast.shortTip("修改绑定成功")
|
||||
} else {
|
||||
TipToast.shortTip("修改绑定失败")
|
||||
|
||||
@@ -50,7 +50,7 @@ class ToBindingCarDialog(context: Context) : BaseFloatDialog(context), Lifecycle
|
||||
*/
|
||||
fun toBindingcar() {
|
||||
CallerBindingcarManager.getBindingcarProvider().modifyCarInfo {
|
||||
if (it.code == 200) {
|
||||
if (it.code != 205) {
|
||||
TipToast.shortTip("绑定成功")
|
||||
} else {
|
||||
TipToast.shortTip("绑定失败")
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.mogo.eagle.core.function.hmi.ui.setting
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.os.Build
|
||||
@@ -12,6 +14,7 @@ import android.view.View
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.content.ContextCompat.getSystemService
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import chassis.Chassis
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClient
|
||||
@@ -48,8 +51,6 @@ import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
|
||||
import com.mogo.eagle.core.function.hmi.R
|
||||
import com.mogo.eagle.core.function.hmi.ui.logcatch.ILogViewListener
|
||||
import com.mogo.eagle.core.function.hmi.ui.logcatch.LogInfoView
|
||||
import com.mogo.eagle.core.function.hmi.ui.tools.AdUpgradeDialog
|
||||
import com.mogo.eagle.core.function.hmi.ui.tools.DockerRebootDialog
|
||||
import com.mogo.eagle.core.function.hmi.ui.upgrade.UpgradeListAdapter
|
||||
import com.mogo.eagle.core.utilcode.kotlin.onClick
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
@@ -83,8 +84,8 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoObuStatusListener,
|
||||
IMoGoAutopilotStatusListener, IMoGoAutopilotCarStateListener,
|
||||
IMoGoMapLocationListener, IMoGoAutopilotIdentifyListener,
|
||||
IMoGoAutopilotPlanningListener, IMoGoAutopilotCarConfigListener
|
||||
,IMoGoAutopilotVehicleStateListener{
|
||||
IMoGoAutopilotPlanningListener, IMoGoAutopilotCarConfigListener,
|
||||
IMoGoAutopilotVehicleStateListener {
|
||||
|
||||
private val TAG = "DebugSettingView"
|
||||
|
||||
@@ -94,7 +95,7 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
private var mAutoPilotStatusInfo: AutopilotStatusInfo? = null
|
||||
private var mGnssInfo: MessagePad.GnssInfo? = null
|
||||
|
||||
private var accelerationFloatWindow: AccelerationFloatWindow?=null
|
||||
private var accelerationFloatWindow: AccelerationFloatWindow? = null
|
||||
private var accelerationList = arrayListOf<AccelerationEntity>()
|
||||
private var accelerationIsShow: Boolean = false //实时加速度面板是否展示
|
||||
private var accelerationThresholdNum: Double = 0.0
|
||||
@@ -114,19 +115,6 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
//日志过滤标签集合
|
||||
private val sceneMap = mutableMapOf<String, SceneModule>()
|
||||
|
||||
private var dockerRebootDialog: DockerRebootDialog? = null //docker重启对话框
|
||||
private var adUpgradeDialog: AdUpgradeDialog? = null //工控机升级对话框
|
||||
private var upgradeMode: Int = -1 //升级模式
|
||||
private var downloadStatus: Int = -1 //下载状态
|
||||
private var currentProgress: Int = -1 //当前已下载包体大小
|
||||
private var previousProgress: Int = -1 //前一秒的下载进度,用于计算下载剩余时间
|
||||
private var totalProgress: Int = -1 //包体总大小
|
||||
private var downloadVersion: String? = null //工控机docker版本
|
||||
private var upgradeStatus: Int = -1 //升级状态
|
||||
|
||||
//ADAS连接状态
|
||||
private var adasConnectStatus: Boolean = false
|
||||
|
||||
//OBU连接状态
|
||||
private var obuConnectStatus: Boolean = false
|
||||
|
||||
@@ -134,9 +122,9 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
private var onlineSelected: Boolean = true
|
||||
private var qaSelected: Boolean = true
|
||||
|
||||
private var upgradeListAdapter: UpgradeListAdapter?=null
|
||||
private var upgradeListAdapter: UpgradeListAdapter? = null
|
||||
|
||||
private val upgradeVersionList by lazy{
|
||||
private val upgradeVersionList by lazy {
|
||||
ArrayList<UpgradeVersionEntity>()
|
||||
}
|
||||
|
||||
@@ -148,6 +136,9 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
|
||||
private var clickListener: ClickListener? = null
|
||||
|
||||
//剪切板
|
||||
private var clipboardManager: ClipboardManager ?= null
|
||||
|
||||
init {
|
||||
LayoutInflater.from(context).inflate(R.layout.view_debug_setting, this, true)
|
||||
initView()
|
||||
@@ -182,7 +173,7 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
// 添加 工控机基础信息回调 监听
|
||||
CallerAutopilotCarConfigListenerManager.addListener(TAG, this)
|
||||
//添加 车辆底盘数据回调 监听
|
||||
CallerAutopilotVehicleStateListenerManager.addListener(TAG,this)
|
||||
CallerAutopilotVehicleStateListenerManager.addListener(TAG, this)
|
||||
if (logInfoView != null) {
|
||||
logInfoView!!.onEnterForeground()
|
||||
}
|
||||
@@ -280,23 +271,41 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
if (isChecked) {
|
||||
buttonView.setCompoundDrawables(null, null, iconDown, null)
|
||||
//展示控制中心
|
||||
controlCenterLayout.visibility = View.VISIBLE
|
||||
// controlCenterLayout.visibility = View.VISIBLE
|
||||
commonLayout.visibility = View.VISIBLE
|
||||
swDevelopMode.visibility = View.VISIBLE
|
||||
swDevelopMode.isChecked = false
|
||||
} else {
|
||||
buttonView.setCompoundDrawables(null, null, iconRight, null)
|
||||
//隐藏控制中心
|
||||
controlCenterLayout.visibility = View.GONE
|
||||
commonLayout.visibility = View.GONE
|
||||
swDevelopMode.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 开发者模式
|
||||
*/
|
||||
swDevelopMode.setOnCheckedChangeListener { _, isChecked ->
|
||||
if(isChecked){
|
||||
controlCenterLayout.visibility = View.VISIBLE
|
||||
commonLayout.visibility = View.GONE
|
||||
}else{
|
||||
controlCenterLayout.visibility = View.GONE
|
||||
commonLayout.visibility = View.VISIBLE
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 鹰眼参数配置
|
||||
*/
|
||||
tbEagleEyeController.setOnCheckedChangeListener { buttonView, isChecked ->
|
||||
if(isChecked){
|
||||
if (isChecked) {
|
||||
buttonView.setCompoundDrawables(null, null, iconDown, null)
|
||||
//展示参数配置
|
||||
eagleEyeControllerLayout.visibility = View.VISIBLE
|
||||
}else{
|
||||
} else {
|
||||
buttonView.setCompoundDrawables(null, null, iconRight, null)
|
||||
//隐藏参数配置
|
||||
eagleEyeControllerLayout.visibility = View.GONE
|
||||
@@ -326,19 +335,21 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
buttonView.setCompoundDrawables(null, null, iconDown, null)
|
||||
//展示OBU控制中心
|
||||
obuControllerLayout.visibility = View.VISIBLE
|
||||
|
||||
tbVehicleStateController.isChecked = true
|
||||
} else {
|
||||
buttonView.setCompoundDrawables(null, null, iconRight, null)
|
||||
//隐藏OBU控制中心
|
||||
obuControllerLayout.visibility = View.GONE
|
||||
tbVehicleStateController.isChecked = false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 车辆状态控制中心
|
||||
*/
|
||||
tbVehicleStateController.setOnCheckedChangeListener { buttonView, isChecked ->
|
||||
if(isChecked){
|
||||
if (isChecked) {
|
||||
buttonView.setCompoundDrawables(null, null, iconDown, null)
|
||||
//展示车辆状态中心
|
||||
vehicleStateLayout.visibility = View.VISIBLE
|
||||
@@ -398,7 +409,7 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
* 应用包管理中心
|
||||
*/
|
||||
btnApkCenter.setOnCheckedChangeListener { buttonView, isChecked ->
|
||||
if(isChecked){
|
||||
if (isChecked) {
|
||||
buttonView.setCompoundDrawables(null, null, iconDown, null)
|
||||
//展示应用包管理中心
|
||||
apkCenterLayout.visibility = View.VISIBLE
|
||||
@@ -491,6 +502,7 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
//工控机配置信息
|
||||
tvAutopilotInfo.text =
|
||||
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfoJsonString()
|
||||
tvIpcInfo.text = CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfoJsonString()
|
||||
|
||||
// 绘制应用基本信息
|
||||
drawAppInfo()
|
||||
@@ -598,7 +610,7 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
}
|
||||
|
||||
//初始化切换自车按钮文本(Bus版本默认显示:切换自车为出租车)
|
||||
if(AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)){
|
||||
if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) {
|
||||
tbChangeCurrentCarIcon.isChecked = true
|
||||
}
|
||||
|
||||
@@ -610,32 +622,66 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
clickListener?.showReportListWindow(isChecked)
|
||||
}
|
||||
|
||||
//SN复制按钮
|
||||
tvPadSnClip.setOnClickListener {
|
||||
if(clipboardManager==null){
|
||||
//获取剪贴板管理器:
|
||||
clipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
}
|
||||
// 创建普通字符型ClipData ,将ClipData内容放到系统剪贴板里
|
||||
clipboardManager?.setPrimaryClip(ClipData.newPlainText("MoGoSN",AppConfigInfo.mogoSN))
|
||||
ToastUtils.showLong("SN复制成功")
|
||||
}
|
||||
|
||||
//工控机镜像复制按钮
|
||||
tvIpcVersionInfoClip.setOnClickListener{
|
||||
if(clipboardManager==null){
|
||||
//获取剪贴板管理器:
|
||||
clipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
}
|
||||
// 创建普通字符型ClipData ,将ClipData内容放到系统剪贴板里
|
||||
clipboardManager?.setPrimaryClip(ClipData.newPlainText("DockVersion",mAutoPilotStatusInfo?.dockVersion))
|
||||
ToastUtils.showLong("docker版本复制成功")
|
||||
}
|
||||
|
||||
//经纬度复制按钮
|
||||
tvCarInfoCopyClip.setOnClickListener{
|
||||
if(clipboardManager==null){
|
||||
//获取剪贴板管理器:
|
||||
clipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
}
|
||||
// 创建普通字符型ClipData ,将ClipData内容放到系统剪贴板里
|
||||
clipboardManager?.setPrimaryClip(ClipData.newPlainText("LonAndLat","${mGnssInfo?.longitude},${mGnssInfo?.latitude}"))
|
||||
ToastUtils.showLong("经纬度复制成功")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置鹰眼本地参数配置监听
|
||||
*/
|
||||
private fun setEagleEyeConfigListener(){
|
||||
private fun setEagleEyeConfigListener() {
|
||||
//初始化刹车加速度阈值信息
|
||||
val brakeThreshold = SharedPrefsMgr.getInstance(context)
|
||||
.getFloat(MoGoConfig.BRAKE_ACCELERATION_THRESHOLD,-2.5F)
|
||||
.getFloat(MoGoConfig.BRAKE_ACCELERATION_THRESHOLD, -2.5F)
|
||||
etInputBrakeThreshold.setText(brakeThreshold.toString())
|
||||
etInputBrakeThreshold.text?.let { etInputBrakeThreshold.setSelection(brakeThreshold.toString().length) }
|
||||
//设置刹车加速度阈值信息
|
||||
btnBrakeThreshold.setOnClickListener {
|
||||
val thresholdStr = etInputBrakeThreshold.text.toString()
|
||||
if(thresholdStr.isEmpty()){
|
||||
if (thresholdStr.isEmpty()) {
|
||||
ToastUtils.showShort("请输入正确的判定刹车加速度阈值")
|
||||
}else{
|
||||
try{
|
||||
} else {
|
||||
try {
|
||||
val thresholdStrFloat = thresholdStr.toFloat()
|
||||
if(thresholdStrFloat<0){
|
||||
SharedPrefsMgr.getInstance(context).putFloat(MoGoConfig.BRAKE_ACCELERATION_THRESHOLD,thresholdStrFloat)
|
||||
if (thresholdStrFloat < 0) {
|
||||
SharedPrefsMgr.getInstance(context)
|
||||
.putFloat(MoGoConfig.BRAKE_ACCELERATION_THRESHOLD, thresholdStrFloat)
|
||||
ToastUtils.showShort("刹车阈值设置成功")
|
||||
}else{
|
||||
} else {
|
||||
ToastUtils.showShort("刹车阈值加速度值应小于0")
|
||||
}
|
||||
}catch (e: Exception){
|
||||
} catch (e: Exception) {
|
||||
ToastUtils.showShort("判定刹车加速度阈值格式设置不正确")
|
||||
}
|
||||
}
|
||||
@@ -677,41 +723,6 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
CallerAutoPilotManager.disconnectIpc()
|
||||
}
|
||||
|
||||
updateSpeedSettingViews()
|
||||
|
||||
/**
|
||||
* 设置最大速度
|
||||
*/
|
||||
btnSetAutopilotSpeed.onClick {
|
||||
if (AppConfigInfo.isConnectAutopilot) {
|
||||
val speedStr = etInputSpeed.text?.toString()
|
||||
try {
|
||||
if (speedStr.isNullOrEmpty()) {
|
||||
ToastUtils.showShort("请输入最大车速")
|
||||
}
|
||||
val speed = speedStr?.toInt()
|
||||
if (speed != null && speed > 0 && speed < 60) {
|
||||
// 设置自动驾驶速度
|
||||
val isSuccess = CallerAutoPilotManager.setAutoPilotSpeed(speed)
|
||||
when {
|
||||
isSuccess -> {
|
||||
ToastUtils.showShort("车速设置成功,立即生效")
|
||||
}
|
||||
else -> {
|
||||
ToastUtils.showShort("设置车速失败,请启动域控制器")
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ToastUtils.showShort("最大车速应大于0且小于60")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
ToastUtils.showShort("车速设置失败,请正确设置车速")
|
||||
}
|
||||
} else {
|
||||
ToastUtils.showShort("设置车速失败,请启动域控制器")
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 录制Bag包
|
||||
*/
|
||||
@@ -731,152 +742,24 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
CallerAutoPilotManager.recordPackage()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 工控机升级
|
||||
*/
|
||||
btnSystemUpgrade.onClick {
|
||||
if (AppConfigInfo.isConnectAutopilot) {
|
||||
Logger.i(
|
||||
TAG,
|
||||
"upgradeMode=" + upgradeMode + " downloadStatus=" + downloadStatus + " upgradeStatus=" + upgradeStatus
|
||||
)
|
||||
if (AdUpgradeStateHelper.isDownloading(downloadStatus)) {
|
||||
//点击Toast提示:下载剩余时间
|
||||
ToastUtils.showShort(
|
||||
"预计" + AdUpgradeStateHelper.getRemainingTime(
|
||||
totalProgress,
|
||||
previousProgress,
|
||||
currentProgress
|
||||
) + "下载完成"
|
||||
)
|
||||
} else if (AdUpgradeStateHelper.getUpgradeStatus()) {
|
||||
//工控机状态为“升级中”
|
||||
ToastUtils.showShort("新版本升级中,预计5分钟升级完成")
|
||||
} else if (AdUpgradeStateHelper.isUpgradeFailed(upgradeStatus)) {
|
||||
//如果升级失败,则Toast提示:升级失败,请联系运维人员
|
||||
ToastUtils.showShort("升级失败,请联系运维人员")
|
||||
} else if (AdUpgradeStateHelper.isHintUpgradeMode(upgradeMode) && AdUpgradeStateHelper.isDownloadFinish(
|
||||
downloadStatus,
|
||||
upgradeStatus
|
||||
)
|
||||
) {
|
||||
//如果升级模式为“提示升级”,并且下载状态为已经下载完成,点击弹出升级确认弹窗
|
||||
if (adUpgradeDialog == null) {
|
||||
adUpgradeDialog = AdUpgradeDialog(context)
|
||||
adUpgradeDialog?.setClickListener(object : AdUpgradeDialog.ClickListener {
|
||||
override fun confirm() {
|
||||
if (mAutoPilotStatusInfo?.state == 2) {
|
||||
//当前处于自动驾驶状态,不可进行升级,Toast提示
|
||||
ToastUtils.showShort("升级前请先退出自动驾驶模式")
|
||||
} else {
|
||||
//确认升级
|
||||
Logger.i(TAG, "upgrade confirm")
|
||||
//设置当前状态为“升级中”
|
||||
AdUpgradeStateHelper.setUpgradeStatus(true)
|
||||
CallerAutoPilotManager.setIPCUpgradeAffirm()
|
||||
}
|
||||
}
|
||||
|
||||
override fun cancel() {
|
||||
//取消升级
|
||||
Logger.i(TAG, "upgrade cancel")
|
||||
//取消升级命令不下发
|
||||
// CallerAutoPilotManager.setIPCUpgradeCancel()
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
adUpgradeDialog?.showUpgradeDialog()
|
||||
btnRecordBag.onClick {
|
||||
val recordTimeStr = etInputRecordBagTime.text?.toString()
|
||||
try {
|
||||
if (recordTimeStr.isNullOrEmpty()) {
|
||||
CallerAutoPilotManager.recordPackage()
|
||||
}
|
||||
val recordTime = recordTimeStr?.toInt()
|
||||
if (recordTime != null && recordTime > 0) {
|
||||
CallerAutoPilotManager.recordPackage(recordTime)
|
||||
} else {
|
||||
ToastUtils.showShort("当前工控机处于最新版本状态,不可升级")
|
||||
CallerAutoPilotManager.recordPackage()
|
||||
}
|
||||
} else {
|
||||
ToastUtils.showShort("域控制器未连接")
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 重启系统
|
||||
*/
|
||||
btnSystemRestart.onClick {
|
||||
if (AppConfigInfo.isConnectAutopilot) {
|
||||
if (dockerRebootDialog == null) {
|
||||
dockerRebootDialog = DockerRebootDialog(context)
|
||||
dockerRebootDialog?.setClickListener(object : DockerRebootDialog.ClickListener {
|
||||
override fun confirm() {
|
||||
if (mAutoPilotStatusInfo?.state == 2) {
|
||||
//当前处于自动驾驶状态,不可进行重启,Toast提示
|
||||
ToastUtils.showShort("请先退出自动驾驶状态")
|
||||
} else if (AdUpgradeStateHelper.showCannotReboot(
|
||||
downloadStatus,
|
||||
upgradeStatus
|
||||
)
|
||||
) {
|
||||
//当工控机处于下载或者升级状态,需要先进行升级
|
||||
ToastUtils.showShort("请先完成新自动驾驶系统的下载/升级")
|
||||
} else {
|
||||
//确认重启
|
||||
Logger.i(TAG, "reboot confirm")
|
||||
CallerAutoPilotManager.setIPCReboot()
|
||||
}
|
||||
}
|
||||
|
||||
override fun cancel() {
|
||||
//取消重启
|
||||
Logger.i(TAG, "reboot cancel")
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
dockerRebootDialog?.showUpgradeDialog()
|
||||
} else {
|
||||
ToastUtils.showShort("域控制器未连接")
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Bus不可设置自动驾驶速度,而Taxi可以
|
||||
*/
|
||||
private fun updateSpeedSettingViews() {
|
||||
when {
|
||||
AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) -> {
|
||||
btnSetAutopilotSpeed.visibility = View.GONE
|
||||
llSpeedLayout.visibility = View.GONE
|
||||
}
|
||||
else -> {
|
||||
btnSetAutopilotSpeed.visibility = View.VISIBLE
|
||||
llSpeedLayout.visibility = View.VISIBLE
|
||||
} catch (e: Exception) {
|
||||
CallerAutoPilotManager.recordPackage()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置工控机下载、升级状态信息
|
||||
* @param upgradeMode 升级模式(提示升级、静默升级)
|
||||
* @param downloadStatus 下载状态
|
||||
* @param currentProgress 当前已经下载包体大小
|
||||
* @param totalProgress 下载包体总大小
|
||||
* @param downloadVersion 下载版本
|
||||
* @param upgradeStatus 升级状态
|
||||
*/
|
||||
fun setAdUpgradeInfo(
|
||||
upgradeMode: Int, downloadStatus: Int, currentProgress: Int, totalProgress: Int,
|
||||
downloadVersion: String, upgradeStatus: Int
|
||||
) {
|
||||
this.upgradeMode = upgradeMode
|
||||
this.downloadStatus = downloadStatus
|
||||
this.previousProgress = this.currentProgress
|
||||
this.currentProgress = currentProgress
|
||||
this.totalProgress = totalProgress
|
||||
this.downloadVersion = downloadVersion
|
||||
this.upgradeStatus = upgradeStatus
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -976,13 +859,13 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
* 实时加速度面板控制
|
||||
*/
|
||||
tbOpenAcceleration.setOnCheckedChangeListener { _, isChecked ->
|
||||
if(isChecked){
|
||||
if (isChecked) {
|
||||
//打开实时加速度面板
|
||||
accelerationFloatWindow = context?.let { AccelerationFloatWindow(it as Activity) }
|
||||
accelerationFloatWindow?.showFloatWindow()
|
||||
etThreshold.visibility = View.VISIBLE
|
||||
btnThresholdDefine.visibility = View.VISIBLE
|
||||
}else{
|
||||
} else {
|
||||
//关闭实时加速度面板
|
||||
accelerationFloatWindow?.hideFloatWindow()
|
||||
etThreshold.visibility = View.GONE
|
||||
@@ -992,9 +875,9 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
}
|
||||
|
||||
btnThresholdDefine.setOnClickListener {
|
||||
try{
|
||||
try {
|
||||
accelerationThresholdNum = etThreshold.text.toString().toDouble()
|
||||
}catch(e:java.lang.Exception){
|
||||
} catch (e: java.lang.Exception) {
|
||||
ToastUtils.showShort("请输入正确的阈值")
|
||||
}
|
||||
}
|
||||
@@ -1198,6 +1081,10 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
|
||||
override fun fwThreadClose() {
|
||||
refreshTraceInfo()
|
||||
}
|
||||
|
||||
override fun moduleLogChanged(moduleTag: MutableMap<String, SceneModule>) {
|
||||
//模块日志 tag 发生变化,需要更新对应 UI
|
||||
setLogCheckedChangeListener()
|
||||
@@ -1207,12 +1094,16 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
//版本信息更新
|
||||
urls?.let {
|
||||
upgradeVersionList.clear()
|
||||
it.iterator().forEach {map ->
|
||||
val name = if(map.key.contains("{")) map.key.replace("{","") else map.key
|
||||
val url = if(map.value.contains("}")) map.value.replace("}","") else map.value
|
||||
upgradeVersionList.add(UpgradeVersionEntity(name.trim(),url))
|
||||
it.iterator().forEach { map ->
|
||||
val name =
|
||||
if (map.key.contains("{")) map.key.replace("{", "") else map.key
|
||||
val url = if (map.value.contains("}")) map.value.replace(
|
||||
"}",
|
||||
""
|
||||
) else map.value
|
||||
upgradeVersionList.add(UpgradeVersionEntity(name.trim(), url))
|
||||
}
|
||||
upgradeVersionList.sortByDescending { upgradeVersionEntity ->upgradeVersionEntity.name }
|
||||
upgradeVersionList.sortByDescending { upgradeVersionEntity -> upgradeVersionEntity.name }
|
||||
upgradeListAdapter?.setDada(dataFilter(upgradeVersionList))
|
||||
upgradeListAdapter?.notifyDataSetChanged()
|
||||
}
|
||||
@@ -1242,23 +1133,8 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
|
||||
val traceInfoMap = CallerDevaToolsManager.getTraceInfo()
|
||||
val autopilot = traceInfoMap[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT]
|
||||
autopilot?.let{
|
||||
cbAdasAutoPilot.isChecked = it.record
|
||||
}
|
||||
val dataTrack = traceInfoMap[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_DATA_TRACKED]
|
||||
dataTrack?.let {
|
||||
cbAdasDataTrack.isChecked = it.record
|
||||
}
|
||||
val trajectory = traceInfoMap[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_TRAJECTORY]
|
||||
trajectory?.let {
|
||||
cbAdasTrajectory.isChecked = it.record
|
||||
}
|
||||
val vehicle = traceInfoMap[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_VEHICLE]
|
||||
vehicle?.let {
|
||||
cbAdasVehicle.isChecked = it.record
|
||||
}
|
||||
// 更新链路信息
|
||||
refreshTraceInfo()
|
||||
|
||||
/**
|
||||
* ADAS自动驾驶链路
|
||||
@@ -1313,24 +1189,46 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun refreshTraceInfo() {
|
||||
val traceInfoMap = CallerDevaToolsManager.getTraceInfo()
|
||||
val autopilot = traceInfoMap[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT]
|
||||
autopilot?.let {
|
||||
cbAdasAutoPilot.isChecked = it.record
|
||||
}
|
||||
val dataTrack = traceInfoMap[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_DATA_TRACKED]
|
||||
dataTrack?.let {
|
||||
cbAdasDataTrack.isChecked = it.record
|
||||
}
|
||||
val trajectory = traceInfoMap[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_TRAJECTORY]
|
||||
trajectory?.let {
|
||||
cbAdasTrajectory.isChecked = it.record
|
||||
}
|
||||
val vehicle = traceInfoMap[ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_VEHICLE]
|
||||
vehicle?.let {
|
||||
cbAdasVehicle.isChecked = it.record
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* APK包管理
|
||||
*/
|
||||
private fun setApkCenterListener(){
|
||||
val layoutManager: LinearLayoutManager = object : LinearLayoutManager(context,
|
||||
VERTICAL, false) {
|
||||
private fun setApkCenterListener() {
|
||||
val layoutManager: LinearLayoutManager = object : LinearLayoutManager(
|
||||
context,
|
||||
VERTICAL, false
|
||||
) {
|
||||
override fun canScrollVertically(): Boolean {
|
||||
// 直接禁止垂直滑动
|
||||
return false
|
||||
}
|
||||
}
|
||||
rvUpgradeVersionList.layoutManager =layoutManager
|
||||
rvUpgradeVersionList.layoutManager = layoutManager
|
||||
|
||||
upgradeListAdapter = UpgradeListAdapter(context,upgradeVersionList,
|
||||
object:UpgradeListAdapter.ClickListener{
|
||||
override fun downloadApk(name: String,url: String) {
|
||||
upgradeListAdapter = UpgradeListAdapter(context, upgradeVersionList,
|
||||
object : UpgradeListAdapter.ClickListener {
|
||||
override fun downloadApk(name: String, url: String) {
|
||||
//下载包
|
||||
CallerDevaToolsManager.downLoadPackage(name,url)
|
||||
CallerDevaToolsManager.downLoadPackage(name, url)
|
||||
ToastUtils.showLong("开始下载APK,稍后可前往downloads文件夹查看")
|
||||
}
|
||||
|
||||
@@ -1340,9 +1238,9 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
|
||||
ivApkSearch.setOnClickListener {
|
||||
val searchStr = etApkSearch.text.toString()
|
||||
if(searchStr.isEmpty()){
|
||||
if (searchStr.isEmpty()) {
|
||||
ToastUtils.showShort("请输入正确的搜索关键字")
|
||||
}else{
|
||||
} else {
|
||||
CallerDevaToolsManager.getUpgradeVersionUrls(searchStr)
|
||||
}
|
||||
|
||||
@@ -1370,11 +1268,11 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
private fun dataFilter(list: ArrayList<UpgradeVersionEntity>): ArrayList<UpgradeVersionEntity> {
|
||||
val tempList = ArrayList<UpgradeVersionEntity>()
|
||||
list.let {
|
||||
it.iterator().forEach { entity->
|
||||
if(onlineSelected && entity.name.contains("online")){
|
||||
it.iterator().forEach { entity ->
|
||||
if (onlineSelected && entity.name.contains("online")) {
|
||||
tempList.add(entity)
|
||||
}
|
||||
if(qaSelected && entity.name.contains("qa")){
|
||||
if (qaSelected && entity.name.contains("qa")) {
|
||||
tempList.add(entity)
|
||||
}
|
||||
}
|
||||
@@ -1435,7 +1333,8 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
AppConfigInfo.isConnectedNetty = CallerTelematicManager.getClientConnStatus()
|
||||
AppConfigInfo.serverIp = CallerTelematicManager.getServerIp()
|
||||
}
|
||||
else -> {}
|
||||
else -> {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1453,11 +1352,12 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
tvAppVersionName.text = "鹰眼版本名:${AppUtils.getAppVersionName()}"
|
||||
tvAutopilotProtocolVersionInfo.text =
|
||||
"Autopilot协议版本:${CallerAutoPilotManager.getProtocolVersion()}"
|
||||
if(AppConfigInfo.protocolVersionNumber==0){
|
||||
tvIpcProtocolVersionInfo.text="工控机协议版本:未知"
|
||||
}else{
|
||||
if (AppConfigInfo.protocolVersionNumber == 0) {
|
||||
tvIpcProtocolVersionInfo.text = "工控机协议版本:未知"
|
||||
} else {
|
||||
tvIpcProtocolVersionInfo.text = "工控机协议版本:${AppConfigInfo.protocolVersionNumber}"
|
||||
}
|
||||
tvIpcVersionInfo.text = "工控机镜像:${mAutoPilotStatusInfo?.dockVersion}"
|
||||
tvMoGoMapVersion.text = "HD-Map版本:${MogoMap.getInstance().mogoMap.mapVersion}"
|
||||
tvGitBranchInfo.text = "Git分支:${AppConfigInfo.workingBranchName}"
|
||||
tvAppBuildTimeInfo.text = "版本构建时间:${AppConfigInfo.appBuildTime}"
|
||||
@@ -1517,9 +1417,25 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
"<font color='blue'>正常"
|
||||
} else {
|
||||
"<font color='red'>异常 原因:${
|
||||
if(AppConfigInfo.connectStatusDescribe.isNullOrEmpty()){
|
||||
if (AppConfigInfo.connectStatusDescribe.isNullOrEmpty()) {
|
||||
"主动断开连接"
|
||||
}else{
|
||||
} else {
|
||||
AppConfigInfo.connectStatusDescribe
|
||||
}
|
||||
}"
|
||||
}
|
||||
}"
|
||||
)
|
||||
|
||||
tvIpcConnectStatus.text = Html.fromHtml(
|
||||
"工控机连接状态:${
|
||||
if (AppConfigInfo.isConnectAutopilot) {
|
||||
"<font color='blue'>正常"
|
||||
} else {
|
||||
"<font color='red'>异常 原因:${
|
||||
if (AppConfigInfo.connectStatusDescribe.isNullOrEmpty()) {
|
||||
"主动断开连接"
|
||||
} else {
|
||||
AppConfigInfo.connectStatusDescribe
|
||||
}
|
||||
}"
|
||||
@@ -1562,7 +1478,7 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
)
|
||||
|
||||
tvLocationEnabled.text = Html.fromHtml(
|
||||
"定位服务开启状态:${
|
||||
"Pad定位服务开启状态:${
|
||||
if (DeviceUtils.isLocationEnabled()) {
|
||||
"<font color='blue'>正常"
|
||||
} else {
|
||||
@@ -1573,18 +1489,31 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
|
||||
|
||||
tvAutopilotInfo.text = GsonUtils.toJson(mAutoPilotStatusInfo)
|
||||
tvIpcInfo.text = GsonUtils.toJson(mAutoPilotStatusInfo)
|
||||
|
||||
tvCarInfo.text =
|
||||
"GPS时间:${(mGnssInfo?.satelliteTime?.times(1000))?.toLong()}\n" +
|
||||
"自车经纬度:\n${mGnssInfo?.longitude}\n${mGnssInfo?.latitude}\n"
|
||||
tvCarInfoCopy.text =
|
||||
"GPS时间:${(mGnssInfo?.satelliteTime?.times(1000))?.toLong()}\n" +
|
||||
"自车经纬度:\n${mGnssInfo?.longitude}\n${mGnssInfo?.latitude}\n"
|
||||
|
||||
tvIdentifyInfo.text =
|
||||
"「有效类型」感知数据个数:${mIdentifyDataSize}\n" +
|
||||
"「未知类型」感知数据个数:${mUnknownIdentifyDataSize}\n"
|
||||
tvIdentifyInfoCopy.text =
|
||||
"「有效类型」感知数据个数:${mIdentifyDataSize}\n" +
|
||||
"「未知类型」感知数据个数:${mUnknownIdentifyDataSize}\n"
|
||||
|
||||
tvTrajectoryInfoSize.text =
|
||||
"引导线点个数:${mTrajectoryInfoSize}"
|
||||
tvTrajectoryInfoSizeCopy.text =
|
||||
"引导线点个数:${mTrajectoryInfoSize}"
|
||||
|
||||
tvRouteInfoSize.text =
|
||||
"全局路径规划点个数:${mRouteInfoSize}"
|
||||
tvRouteInfoSizeCopy.text =
|
||||
"全局路径规划点个数:${mRouteInfoSize}"
|
||||
|
||||
|
||||
// 用完之后重制为0,防止节点回掉突然没数据,导致页面显示还是之前的数据情况
|
||||
@@ -1621,30 +1550,40 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
AppConfigInfo.isConnectAutopilot = autoPilotStatusInfo.connectStatus
|
||||
AppConfigInfo.connectStatusDescribe = autoPilotStatusInfo.connectStatusDescribe
|
||||
|
||||
// if (autoPilotStatusInfo.connectStatus) {
|
||||
// adasConnectStatus = true
|
||||
// }
|
||||
//ADAS断开连接,提示异常
|
||||
// if (adasConnectStatus && !autoPilotStatusInfo.connectStatus) {
|
||||
// adasConnectStatus = false
|
||||
// toastMsg("工控机连接断开")
|
||||
// }
|
||||
}
|
||||
|
||||
override fun onAutopilotCarStateData(gnssInfo: MessagePad.GnssInfo?) {
|
||||
mGnssInfo = gnssInfo
|
||||
//实时加速度列表
|
||||
ThreadUtils.runOnUiThread{
|
||||
if(accelerationIsShow){
|
||||
if(accelerationList.size > 9){
|
||||
ThreadUtils.runOnUiThread {
|
||||
if (accelerationIsShow) {
|
||||
if (accelerationList.size > 9) {
|
||||
accelerationList.removeLast()
|
||||
}
|
||||
gnssInfo?.acceleration?.let {
|
||||
if(accelerationList.isEmpty()){
|
||||
accelerationList.add(AccelerationEntity(TimeUtils.millis2String(System.currentTimeMillis(),TimeUtils.getHourMinSecondFormat()),it.toString()))
|
||||
if (accelerationList.isEmpty()) {
|
||||
accelerationList.add(
|
||||
AccelerationEntity(
|
||||
TimeUtils.millis2String(
|
||||
System.currentTimeMillis(),
|
||||
TimeUtils.getHourMinSecondFormat()
|
||||
), it.toString()
|
||||
)
|
||||
)
|
||||
}
|
||||
if(abs(it.minus(accelerationList.first().acceleration.toDouble())) > abs(accelerationThresholdNum)){
|
||||
accelerationList.add(0, AccelerationEntity(TimeUtils.millis2String(System.currentTimeMillis(),TimeUtils.getHourMinSecondFormat()),it.toString()))
|
||||
if (abs(it.minus(accelerationList.first().acceleration.toDouble())) > abs(
|
||||
accelerationThresholdNum
|
||||
)
|
||||
) {
|
||||
accelerationList.add(
|
||||
0,
|
||||
AccelerationEntity(
|
||||
TimeUtils.millis2String(
|
||||
System.currentTimeMillis(),
|
||||
TimeUtils.getHourMinSecondFormat()
|
||||
), it.toString()
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
accelerationFloatWindow?.refreshData(accelerationList)
|
||||
@@ -1703,13 +1642,15 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
tvReportCode.text = "code:${it.code}"
|
||||
var resultStr = "result:"
|
||||
for (result in it.resultList) {
|
||||
resultStr = "$resultStr$result${CallerAutoPilotManager.getReportResultDesc(result)} "
|
||||
resultStr =
|
||||
"$resultStr$result${CallerAutoPilotManager.getReportResultDesc(result)} "
|
||||
}
|
||||
tvReportResult.text = resultStr
|
||||
|
||||
var actionStr = "action:"
|
||||
for (action in it.actionsList) {
|
||||
actionStr = "$actionStr$action${CallerAutoPilotManager.getReportActionDesc(action)} "
|
||||
actionStr =
|
||||
"$actionStr$action${CallerAutoPilotManager.getReportActionDesc(action)} "
|
||||
}
|
||||
tvReportActions.text = actionStr
|
||||
|
||||
@@ -1749,7 +1690,7 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
* 时延显示
|
||||
*/
|
||||
override fun onObuV2iDelayTime(delayTime: Long) {
|
||||
ThreadUtils.runOnUiThread{
|
||||
ThreadUtils.runOnUiThread {
|
||||
tvObuDelay.text = "obu时延:" + delayTime.toString()
|
||||
}
|
||||
}
|
||||
@@ -1775,7 +1716,7 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
* @param steering 方向盘转向角
|
||||
*/
|
||||
override fun onAutopilotSteeringData(steering: Float) {
|
||||
ThreadUtils.runOnUiThread{
|
||||
ThreadUtils.runOnUiThread {
|
||||
tvSteeringInfo.text = "方向盘转向角:${steering}"
|
||||
}
|
||||
}
|
||||
@@ -1785,7 +1726,7 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
* @param gear 档位
|
||||
*/
|
||||
override fun onAutopilotGearData(gear: Chassis.GearPosition) {
|
||||
ThreadUtils.runOnUiThread{
|
||||
ThreadUtils.runOnUiThread {
|
||||
tvGearInfo.text = "挂挡档位:${gear}"
|
||||
}
|
||||
}
|
||||
@@ -1804,7 +1745,7 @@ class DebugSettingView @JvmOverloads constructor(
|
||||
this.clickListener = clickListener
|
||||
}
|
||||
|
||||
interface ClickListener{
|
||||
interface ClickListener {
|
||||
fun showReportListWindow(show: Boolean)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.mogo.eagle.core.function.hmi.ui.setting
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.mogo.eagle.core.data.report.ReportEntity
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager
|
||||
import com.mogo.eagle.core.function.hmi.R
|
||||
|
||||
/**
|
||||
* @author XuXinChao
|
||||
* @description 工控机异常节点上报适配器
|
||||
* @since: 2022/5/12
|
||||
*/
|
||||
class IPCReportAdapter: RecyclerView.Adapter<IPCReportAdapter.IPCReportHolder>(){
|
||||
|
||||
private var data:List<ReportEntity>? = null
|
||||
|
||||
fun setData( data: List<ReportEntity>?){
|
||||
this.data = data
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): IPCReportHolder {
|
||||
val view = LayoutInflater.from(parent.context)
|
||||
.inflate(R.layout.item_ipc_report, parent, false)
|
||||
return IPCReportHolder(view)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: IPCReportHolder, position: Int) {
|
||||
data?.let {it ->
|
||||
val reportEntity = it[position]
|
||||
reportEntity.let {
|
||||
holder.tvReportTimeContent.text = it.time
|
||||
var resultStr = "发生异常"
|
||||
for (result in it.resultList){
|
||||
resultStr = "${resultStr}-${CallerAutoPilotManager.getReportResultDesc(result)}"
|
||||
}
|
||||
holder.tvReportResultContent.text = resultStr
|
||||
holder.tvReportMsgContent.text = it.msg
|
||||
var actionStr = ""
|
||||
for (action in it.actionsList){
|
||||
actionStr = "${actionStr}-${CallerAutoPilotManager.getReportActionDesc(action)}"
|
||||
}
|
||||
holder.tvReportActionContent.text = actionStr
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getItemCount() = data?.size ?: 0
|
||||
|
||||
class IPCReportHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
|
||||
var tvReportTimeContent: TextView = itemView.findViewById(R.id.tvReportTimeContent)
|
||||
var tvReportResultContent: TextView = itemView.findViewById(R.id.tvReportResultContent)
|
||||
var tvReportMsgContent: TextView = itemView.findViewById(R.id.tvReportMsgContent)
|
||||
var tvReportActionContent: TextView = itemView.findViewById(R.id.tvReportActionContent)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
package com.mogo.eagle.core.function.hmi.ui.setting
|
||||
|
||||
import android.app.Activity
|
||||
import android.graphics.PixelFormat
|
||||
import android.util.DisplayMetrics
|
||||
import android.view.*
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.mogo.eagle.core.data.report.ReportEntity
|
||||
import com.mogo.eagle.core.function.hmi.R
|
||||
import java.lang.reflect.Field
|
||||
|
||||
/**
|
||||
* @author XuXinChao
|
||||
* @description 工控机异常节点上报
|
||||
* @since: 2022/5/12
|
||||
*/
|
||||
class IPCReportWindow constructor(activity: Activity) : View.OnTouchListener{
|
||||
|
||||
private var mActivity: Activity = activity
|
||||
private var mWindowParams: WindowManager.LayoutParams? = null
|
||||
private var mWindowManager: WindowManager? = null
|
||||
private lateinit var rvIPCReport: RecyclerView
|
||||
private var ipcReportAdapter: IPCReportAdapter?=null
|
||||
|
||||
private lateinit var mFloatLayout: View
|
||||
private var mInViewX = 0f
|
||||
private var mInViewY = 0f
|
||||
private var mDownInScreenX = 0f
|
||||
private var mDownInScreenY = 0f
|
||||
private var mInScreenX = 0f
|
||||
private var mInScreenY = 0f
|
||||
|
||||
init {
|
||||
initFloatWindow();
|
||||
}
|
||||
|
||||
private fun initFloatWindow(){
|
||||
mFloatLayout = LayoutInflater.from(mActivity).inflate(R.layout.view_ipc_report, null) as View
|
||||
mFloatLayout.setOnTouchListener(this)
|
||||
rvIPCReport= mFloatLayout.findViewById(R.id.rv_ipc_report)
|
||||
mWindowParams = WindowManager.LayoutParams()
|
||||
mWindowManager = mActivity.windowManager
|
||||
mWindowParams?.let {
|
||||
it.format = PixelFormat.RGBA_8888
|
||||
it.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
|
||||
it.gravity = Gravity.START or Gravity.TOP
|
||||
it.width = 800
|
||||
it.height = 1000
|
||||
it.alpha = 0.9f
|
||||
}
|
||||
ipcReportAdapter = IPCReportAdapter()
|
||||
rvIPCReport.layoutManager = LinearLayoutManager(mActivity,
|
||||
LinearLayoutManager.VERTICAL,false)
|
||||
rvIPCReport.adapter = ipcReportAdapter
|
||||
}
|
||||
|
||||
fun refreshData(data:List<ReportEntity>){
|
||||
ipcReportAdapter?.setData(data)
|
||||
ipcReportAdapter?.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun onTouch(v: View?, motionEvent: MotionEvent?): Boolean {
|
||||
when (motionEvent?.action) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
// 获取相对View的坐标,即以此View左上角为原点
|
||||
mInViewX = motionEvent.x
|
||||
mInViewY = motionEvent.y
|
||||
// 获取相对屏幕的坐标,即以屏幕左上角为原点
|
||||
mDownInScreenX = motionEvent.rawX
|
||||
mDownInScreenY = motionEvent.rawY - getSysBarHeight(mActivity)
|
||||
mInScreenX = motionEvent.rawX
|
||||
mInScreenY = motionEvent.rawY - getSysBarHeight(mActivity)
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
// 更新浮动窗口位置参数
|
||||
mInScreenX = motionEvent.rawX
|
||||
mInScreenY = motionEvent.rawY - getSysBarHeight(mActivity)
|
||||
mWindowParams!!.x = (mInScreenX - mInViewX).toInt()
|
||||
mWindowParams!!.y = (mInScreenY - mInViewY).toInt()
|
||||
// 手指移动的时候更新小悬浮窗的位置
|
||||
mWindowManager!!.updateViewLayout(mFloatLayout, mWindowParams)
|
||||
}
|
||||
// MotionEvent.ACTION_UP -> // 如果手指离开屏幕时,xDownInScreen和xInScreen相等,且yDownInScreen和yInScreen相等,则视为触发了单击事件。
|
||||
// if (mDownInScreenX === mInScreenX && mDownInScreenY === mInScreenY) {
|
||||
// }
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
fun showFloatWindow() {
|
||||
if (mFloatLayout.parent == null) {
|
||||
val metrics = DisplayMetrics()
|
||||
// 默认固定位置,靠屏幕右边缘的中间
|
||||
mWindowManager!!.defaultDisplay.getMetrics(metrics)
|
||||
mWindowParams!!.x = metrics.widthPixels
|
||||
mWindowParams!!.y = metrics.heightPixels / 2 - getSysBarHeight(mActivity)
|
||||
mWindowManager!!.addView(mFloatLayout, mWindowParams)
|
||||
}
|
||||
}
|
||||
|
||||
fun hideFloatWindow() {
|
||||
if (mFloatLayout.parent != null) mWindowManager!!.removeView(mFloatLayout)
|
||||
}
|
||||
|
||||
// 获取系统状态栏高度
|
||||
private fun getSysBarHeight(activity: Activity): Int {
|
||||
val c: Class<*>
|
||||
val obj: Any
|
||||
val field: Field
|
||||
val x: Int
|
||||
var sbar = 0
|
||||
try {
|
||||
c = Class.forName("com.android.internal.R\$dimen")
|
||||
obj = c.newInstance()
|
||||
field = c.getField("status_bar_height")
|
||||
x = field.get(obj).toString().toInt()
|
||||
sbar = activity.resources.getDimensionPixelSize(x)
|
||||
} catch (e1: Exception) {
|
||||
e1.printStackTrace()
|
||||
}
|
||||
return sbar
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -56,6 +56,7 @@ class CircularProgressView @JvmOverloads constructor(
|
||||
mProgPaint.isDither = true // 设置抖动
|
||||
mProgPaint.strokeWidth = typedArray.getDimension(R.styleable.CircularProgressView_progWidth, 10.0f)
|
||||
mProgPaint.color = typedArray.getColor(R.styleable.CircularProgressView_progColor, Color.BLUE)
|
||||
// mProgPaint.setPathEffect()
|
||||
// 初始化进度圆环渐变色
|
||||
val startColor = typedArray.getColor(R.styleable.CircularProgressView_progStartColor, -1)
|
||||
val firstColor = typedArray.getColor(R.styleable.CircularProgressView_progFirstColor, -1)
|
||||
@@ -64,8 +65,6 @@ class CircularProgressView @JvmOverloads constructor(
|
||||
} else {
|
||||
mColorArray = null
|
||||
}
|
||||
|
||||
|
||||
typedArray.recycle();
|
||||
}
|
||||
|
||||
@@ -102,6 +101,12 @@ class CircularProgressView @JvmOverloads constructor(
|
||||
|
||||
}
|
||||
|
||||
fun setBlurMaskFilter(blur: BlurMaskFilter.Blur, radius: Float) {
|
||||
var blur: BlurMaskFilter = BlurMaskFilter(radius, blur)
|
||||
mProgPaint.setMaskFilter(blur)
|
||||
invalidate()
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前进度
|
||||
* @return 当前进度(0-100)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.mogo.eagle.core.function.hmi.ui.widget;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.BlurMaskFilter;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -75,13 +76,14 @@ public class SteeringWheelView extends ConstraintLayout {
|
||||
tapPositionView = findViewById(R.id.tap_position);
|
||||
steeringCircularV = findViewById(R.id.steering_circular);
|
||||
steeringCircularV.setBackWidth(8);
|
||||
steeringCircularV.setBackColor(R.color.hmi_light_blue_00);
|
||||
steeringCircularV.setBackColor(R.color.hmi_light_back_bg);
|
||||
steeringCircularV.setProgColor(R.color.hmi_light_blue, R.color.hmi_dark_blue);
|
||||
steeringCircularV.setProgress((int) (180 * 100) / 360, 1000);
|
||||
if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)){
|
||||
if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) {
|
||||
steeringCircularVAlpha = findViewById(R.id.steering_circular_alpha);
|
||||
steeringCircularVAlpha.setAlpha(0.4f);
|
||||
steeringCircularVAlpha.setBackColor(R.color.hmi_light_blue_00);
|
||||
steeringCircularVAlpha.setBackWidth(12);
|
||||
steeringCircularVAlpha.setBlurMaskFilter(BlurMaskFilter.Blur.NORMAL, 12);
|
||||
steeringCircularVAlpha.setBackColor(R.color.hmi_clear_00);
|
||||
steeringCircularVAlpha.setProgColor(R.color.hmi_light_blue_alpha);
|
||||
steeringCircularVAlpha.setProgress((int) (180 * 100) / 360, 1000);
|
||||
}
|
||||
|
||||
@@ -104,6 +104,7 @@ class SystemVersionView @JvmOverloads constructor(
|
||||
CallerLogger.i("$M_HMI$$TAG", "upgrade confirm")
|
||||
//设置当前状态为“升级中”
|
||||
AdUpgradeStateHelper.setUpgradeStatus(true)
|
||||
//TODO
|
||||
CallerAutoPilotManager.setIPCUpgradeAffirm()
|
||||
//将角标设为升级中
|
||||
ivAdStatus?.setImageResource(R.drawable.icon_upgrading)
|
||||
|
||||
@@ -91,6 +91,7 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
|
||||
private RecyclerView mConnectInfoRV;
|
||||
private ConnInfoAdapter mConnAdapter;
|
||||
private List<AutopilotStatusInfo> dataList = new ArrayList<>();
|
||||
private int mLastStatus = 0x00;
|
||||
private boolean isFloatingLayerHidden = false;
|
||||
|
||||
@Override
|
||||
@@ -372,22 +373,31 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
|
||||
|
||||
@Override
|
||||
public void onAutopilotStatusResponse(@NonNull AutopilotStatusInfo autoPilotStatusInfo) {
|
||||
mConnectInfoRV.post(() -> updateConnectInfoView(autoPilotStatusInfo));
|
||||
int status = autoPilotStatusInfo.getIpcConnStatus();
|
||||
if (mLastStatus != status) {
|
||||
AutopilotStatusInfo statusInfo = autoPilotStatusInfo.clone();
|
||||
mConnectInfoRV.post(() -> updateConnectInfoView(statusInfo));
|
||||
mLastStatus = status;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutopilotArriveAtStation(@Nullable MessagePad.ArrivalNotification arrivalNotification) {}
|
||||
public void onAutopilotArriveAtStation(@Nullable MessagePad.ArrivalNotification arrivalNotification) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutopilotGuardian(@Nullable MogoReportMsg.MogoReportMessage guardianInfo) {}
|
||||
public void onAutopilotGuardian(@Nullable MogoReportMsg.MogoReportMessage guardianInfo) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutopilotSNRequest() {}
|
||||
public void onAutopilotSNRequest() {
|
||||
}
|
||||
|
||||
private void updateConnectInfoView(@NonNull AutopilotStatusInfo autoPilotStatusInfo) {
|
||||
if (!isFloatingLayerHidden) {// 遮罩层显示的时候
|
||||
mConnAdapter.updateData(autoPilotStatusInfo);
|
||||
mConnectInfoRV.scrollToPosition(mConnAdapter.getItemCount() - 1);
|
||||
mLastStatus = autoPilotStatusInfo.getIpcConnStatus();
|
||||
} else {// 遮罩层隐藏的时候
|
||||
CallerAutoPilotStatusListenerManager.INSTANCE.removeListener(TAG);
|
||||
}
|
||||
|
||||
@@ -17,20 +17,6 @@
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<!--底层默认进度条,无进度值改变动作-->
|
||||
<ProgressBar
|
||||
android:id="@+id/blue_circle"
|
||||
android:layout_width="@dimen/dp_260"
|
||||
android:layout_height="@dimen/dp_260"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginLeft="@dimen/dp_85"
|
||||
android:layout_marginTop="@dimen/dp_130"
|
||||
android:layout_marginRight="@dimen/dp_85"
|
||||
android:indeterminateDrawable="@drawable/bg_steering_outer_taxi"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/steering_tv_left"
|
||||
android:layout_width="wrap_content"
|
||||
@@ -61,12 +47,12 @@
|
||||
<!--进度值改变状态进度条-->
|
||||
<com.mogo.eagle.core.function.hmi.ui.widget.CircularProgressView
|
||||
android:id="@+id/steering_circular"
|
||||
android:layout_width="@dimen/dp_260"
|
||||
android:layout_height="@dimen/dp_260"
|
||||
android:layout_width="@dimen/dp_278"
|
||||
android:layout_height="@dimen/dp_278"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginTop="@dimen/dp_130"
|
||||
android:outlineAmbientShadowColor="#1EBBCFF6"
|
||||
android:layout_marginTop="@dimen/dp_122"
|
||||
android:padding="@dimen/dp_12"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
@@ -76,15 +62,15 @@
|
||||
<!--状态条阴影-->
|
||||
<com.mogo.eagle.core.function.hmi.ui.widget.CircularProgressView
|
||||
android:id="@+id/steering_circular_alpha"
|
||||
android:layout_width="@dimen/dp_274"
|
||||
android:layout_height="@dimen/dp_274"
|
||||
android:layout_width="@dimen/dp_280"
|
||||
android:layout_height="@dimen/dp_280"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginTop="@dimen/dp_122"
|
||||
android:layout_marginTop="@dimen/dp_120"
|
||||
android:padding="@dimen/dp_12"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:progWidth="22px"
|
||||
app:progress="0" />
|
||||
|
||||
<ImageView
|
||||
@@ -104,6 +90,6 @@
|
||||
android:layout_marginTop="@dimen/dp_30"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/blue_circle" />
|
||||
app:layout_constraintTop_toBottomOf="@+id/steering_circular" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,81 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvReportTimeTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvReportTimeContent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintLeft_toRightOf="@id/tvReportTimeTitle"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvReportResultTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvReportTimeTitle"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvReportResultContent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="@id/tvReportResultTitle"
|
||||
app:layout_constraintLeft_toRightOf="@id/tvReportResultTitle"
|
||||
android:minLines="1"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvReportMsgTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvReportResultContent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvReportMsgContent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="@id/tvReportMsgTitle"
|
||||
app:layout_constraintLeft_toRightOf="@id/tvReportMsgTitle"
|
||||
android:minLines="1"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvReportActionTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvReportMsgContent"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvReportActionContent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="@id/tvReportActionTitle"
|
||||
app:layout_constraintLeft_toRightOf="@id/tvReportActionTitle"
|
||||
android:minLines="1"
|
||||
/>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="#F0F0F0"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvReportActionContent"
|
||||
/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -89,8 +89,10 @@
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rvConnectInfo"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="1200px"
|
||||
android:layout_height="680px"
|
||||
android:layout_gravity="bottom"
|
||||
|
||||
/>
|
||||
|
||||
</FrameLayout>
|
||||
@@ -166,6 +166,29 @@
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvIpcConnectStatus"
|
||||
style="@style/DebugSettingText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minLines="3"/>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="#F0F0F0" />
|
||||
|
||||
<ToggleButton
|
||||
android:id="@+id/tbIsDemoMode"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/dp_10"
|
||||
android:textColor="#000"
|
||||
android:textOff="开启美化模式"
|
||||
android:textOn="关闭美化模式"
|
||||
android:textSize="@dimen/dp_24"
|
||||
android:background="@drawable/radio_button_normal_background_right"/>
|
||||
|
||||
<ToggleButton
|
||||
android:id="@+id/tbDeviceBind"
|
||||
android:layout_width="match_parent"
|
||||
@@ -184,11 +207,32 @@
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvPadSn"
|
||||
style="@style/DebugSettingText"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvPadSn"
|
||||
style="@style/DebugSettingText"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvPadSnClip"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="复制"
|
||||
android:layout_margin="@dimen/dp_10"
|
||||
android:paddingStart="10dp"
|
||||
android:paddingEnd="10dp"
|
||||
android:textSize="14sp"
|
||||
android:textColor="#0000FF"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
@@ -288,6 +332,35 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="#F0F0F0" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvIpcVersionInfo"
|
||||
style="@style/DebugSettingText"
|
||||
android:layout_width="@dimen/dp_600"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvIpcVersionInfoClip"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="复制"
|
||||
android:textSize="14sp"
|
||||
android:textColor="#0000FF"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
@@ -437,6 +510,135 @@
|
||||
android:textOff="控制中心"
|
||||
android:textOn="控制中心" />
|
||||
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:id="@+id/swDevelopMode"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:text="开发者模式"
|
||||
style="@style/DebugSettingText"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/commonLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvIpcInfo"
|
||||
style="@style/DebugSettingText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minLines="7"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<View
|
||||
android:id="@+id/tvIpcInfoDivider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="#F0F0F0"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvIpcInfo"
|
||||
/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnRecordBag"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:padding="@dimen/dp_5"
|
||||
android:text="录制Bag包"
|
||||
android:textSize="@dimen/dp_24"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvIpcInfoDivider"/>
|
||||
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginStart="@dimen/dp_30"
|
||||
android:layout_marginTop="@dimen/dp_10"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:layout_marginBottom="@dimen/dp_10"
|
||||
android:background="@drawable/debug_setting_edit_bg"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="true"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintBottom_toBottomOf="@id/btnRecordBag"
|
||||
app:layout_constraintLeft_toRightOf="@id/btnRecordBag"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@id/btnRecordBag">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatEditText
|
||||
android:id="@+id/etInputRecordBagTime"
|
||||
style="@style/DebugSettingText"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="90px"
|
||||
android:layout_weight="1"
|
||||
android:background="@null"
|
||||
android:gravity="center"
|
||||
tools:ignore="SpeakableTextPresentCheck" />
|
||||
|
||||
<TextView
|
||||
style="@style/DebugSettingText"
|
||||
android:layout_width="93px"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_vertical"
|
||||
android:text="秒" />
|
||||
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
|
||||
<View
|
||||
android:id="@+id/recordBagDivider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="#F0F0F0"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnRecordBag" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvCarInfoCopy"
|
||||
style="@style/DebugSettingText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@id/recordBagDivider" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvCarInfoCopyClip"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="复制经纬度"
|
||||
android:layout_marginStart="@dimen/dp_10"
|
||||
android:textSize="14sp"
|
||||
android:textColor="#0000FF"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvCarInfoCopy"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvIdentifyInfoCopy"
|
||||
style="@style/DebugSettingText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvCarInfoCopyClip" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvTrajectoryInfoSizeCopy"
|
||||
style="@style/DebugSettingText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvIdentifyInfoCopy" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvRouteInfoSizeCopy"
|
||||
style="@style/DebugSettingText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvTrajectoryInfoSizeCopy" />
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/controlCenterLayout"
|
||||
android:layout_width="match_parent"
|
||||
@@ -468,7 +670,7 @@
|
||||
style="@style/DebugSettingText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minLines="6"
|
||||
android:minLines="7"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<View
|
||||
@@ -528,61 +730,6 @@
|
||||
android:background="#F0F0F0"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnSetAutopilotIP" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnSetAutopilotSpeed"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:padding="@dimen/dp_5"
|
||||
android:text="设置最大速度"
|
||||
android:textSize="@dimen/dp_24"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/autopilotIPDivider" />
|
||||
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
android:id="@+id/llSpeedLayout"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginStart="@dimen/dp_30"
|
||||
android:layout_marginTop="@dimen/dp_10"
|
||||
android:layout_marginEnd="@dimen/dp_30"
|
||||
android:layout_marginBottom="@dimen/dp_10"
|
||||
android:background="@drawable/debug_setting_edit_bg"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="true"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintBottom_toBottomOf="@id/btnSetAutopilotSpeed"
|
||||
app:layout_constraintLeft_toRightOf="@id/btnSetAutopilotSpeed"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@id/btnSetAutopilotSpeed">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatEditText
|
||||
android:id="@+id/etInputSpeed"
|
||||
style="@style/DebugSettingText"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="90px"
|
||||
android:layout_weight="1"
|
||||
android:background="@null"
|
||||
android:gravity="center"
|
||||
tools:ignore="SpeakableTextPresentCheck" />
|
||||
|
||||
<TextView
|
||||
style="@style/DebugSettingText"
|
||||
android:layout_width="93px"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_vertical"
|
||||
android:text="km/h" />
|
||||
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
|
||||
<View
|
||||
android:id="@+id/autopilotSpeedDivider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="#F0F0F0"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnSetAutopilotSpeed" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnRecordPackage"
|
||||
android:layout_width="wrap_content"
|
||||
@@ -592,7 +739,7 @@
|
||||
android:text="录制Bag包"
|
||||
android:textSize="@dimen/dp_24"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/autopilotSpeedDivider" />
|
||||
app:layout_constraintTop_toBottomOf="@id/autopilotIPDivider" />
|
||||
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
android:layout_width="0dp"
|
||||
@@ -636,36 +783,13 @@
|
||||
android:layout_height="1dp"
|
||||
android:background="#F0F0F0"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnRecordPackage" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnSystemUpgrade"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="升级系统"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toLeftOf="@id/btnSystemRestart"
|
||||
app:layout_constraintTop_toBottomOf="@id/recordPackageDivider"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnSystemRestart"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="重启系统"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintLeft_toRightOf="@id/btnSystemUpgrade"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/recordPackageDivider"
|
||||
tools:visibility="visible" />
|
||||
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvCarInfo"
|
||||
style="@style/DebugSettingText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnSystemUpgrade" />
|
||||
app:layout_constraintTop_toBottomOf="@id/recordPackageDivider" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvIdentifyInfo"
|
||||
@@ -1304,20 +1428,6 @@
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/btnOpenObuFusion" />
|
||||
|
||||
<ToggleButton
|
||||
android:id="@+id/tbIsDemoMode"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="2dp"
|
||||
android:padding="@dimen/dp_10"
|
||||
android:textColor="#000"
|
||||
android:textOff="开启美化模式"
|
||||
android:textOn="关闭美化模式"
|
||||
android:textSize="@dimen/dp_24"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toLeftOf="@id/tbIsDrawAutopilotTrajectoryData"
|
||||
app:layout_constraintTop_toBottomOf="@id/tbIsDrawIdentifyData" />
|
||||
|
||||
<ToggleButton
|
||||
android:id="@+id/tbIsDrawAutopilotTrajectoryData"
|
||||
android:layout_width="0dp"
|
||||
@@ -1328,9 +1438,9 @@
|
||||
android:textOff="强制绘制引导线"
|
||||
android:textOn="强制绘制引导线"
|
||||
android:textSize="@dimen/dp_24"
|
||||
app:layout_constraintLeft_toRightOf="@id/tbIsDemoMode"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@id/tbIsDemoMode" />
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toLeftOf="@id/tbIsDrawAutopilotTrajectoryData"
|
||||
app:layout_constraintTop_toBottomOf="@id/tbIsDrawIdentifyData" />
|
||||
|
||||
<ToggleButton
|
||||
android:layout_width="0dp"
|
||||
@@ -1341,9 +1451,9 @@
|
||||
android:textOff="强制绘制路径规划"
|
||||
android:textOn="强制绘制路径规划"
|
||||
android:textSize="@dimen/dp_24"
|
||||
app:layout_constraintLeft_toLeftOf="@id/tbIsDemoMode"
|
||||
app:layout_constraintRight_toRightOf="@id/tbIsDemoMode"
|
||||
app:layout_constraintTop_toBottomOf="@id/tbIsDemoMode" />
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintLeft_toRightOf="@id/tbIsDrawAutopilotTrajectoryData"
|
||||
app:layout_constraintTop_toBottomOf="@id/tbIsDrawIdentifyData"/>
|
||||
|
||||
<ToggleButton
|
||||
android:id="@+id/tbChangeAutoPilotStatus"
|
||||
@@ -1354,9 +1464,9 @@
|
||||
android:textOff="开启模拟自动驾驶中"
|
||||
android:textOn="关闭模拟自动驾驶中"
|
||||
android:textSize="@dimen/dp_24"
|
||||
app:layout_constraintLeft_toRightOf="@id/tbIsDemoMode"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tbIsDemoMode" />
|
||||
app:layout_constraintTop_toBottomOf="@id/tbIsDrawAutopilotTrajectoryData"
|
||||
app:layout_constraintLeft_toLeftOf="@id/tbIsDrawAutopilotTrajectoryData"
|
||||
app:layout_constraintRight_toRightOf="@id/tbIsDrawAutopilotTrajectoryData"/>
|
||||
|
||||
<RadioGroup
|
||||
android:id="@+id/rgGpsProvider"
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="840px"
|
||||
android:layout_height="584px"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/icon_drag"
|
||||
android:padding="15dp"
|
||||
android:layout_gravity="center_horizontal"
|
||||
/>
|
||||
|
||||
<com.mogo.eagle.core.widget.RoundConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/dialog_bg_color"
|
||||
app:roundLayoutRadius="10dp">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rv_ipc_report"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</com.mogo.eagle.core.widget.RoundConstraintLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -56,6 +56,7 @@
|
||||
<color name="hmi_traffic_light_yellow_color_down">#FFFF9B00</color>
|
||||
<color name="hmi_light_blue">#45D3FF</color>
|
||||
<color name="hmi_dark_blue">#1B5BFF</color>
|
||||
<color name="hmi_light_blue_00">#0045D3FF</color>
|
||||
<color name="hmi_light_blue_alpha">#666C79C4</color>
|
||||
<color name="hmi_light_back_bg">#1EBBCFF6</color>
|
||||
<color name="hmi_light_blue_alpha">#6C79C4</color>
|
||||
<color name="hmi_clear_00">#0045D3FF</color>
|
||||
</resources>
|
||||
@@ -37,7 +37,7 @@
|
||||
<string name="application_upgrade_confirm">是否将应用升级至最新版本?</string>
|
||||
<string name="application_upgrade_tips">注意!升级时需退出自动驾驶,支持在人工驾驶时升级,升级时不可中途断电。</string>
|
||||
<string name="confirm">确认</string>
|
||||
<string name="cancel">取消</string>
|
||||
<string name="cancel">稍后升级</string>
|
||||
|
||||
<!--绑定车机-->
|
||||
<string name="bindingcar_title">绑定车机</string>
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.mogo.eagle.core.function.call.trafficlight.CallTrafficLightManager
|
||||
import com.mogo.eagle.core.function.v2x.events.V2XEventManager
|
||||
import com.mogo.eagle.core.function.v2x.redlightwarning.RedLightWarningManager
|
||||
import com.mogo.eagle.core.function.v2x.speedlimit.SpeedLimitDataManager
|
||||
import com.mogo.eagle.core.function.v2x.trafficlight.core.TrafficLightDispatcher
|
||||
import com.mogo.eagle.core.function.v2x.vip.VipCarManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
|
||||
@@ -22,6 +23,7 @@ class V2XProvider : IMoGoFunctionServerProvider {
|
||||
CallTrafficLightManager.getTrafficLightProvider().initTrafficLightServer(context)
|
||||
VipCarManager.INSTANCE.initServer(context)
|
||||
SpeedLimitDataManager.getInstance().start()
|
||||
TrafficLightDispatcher.INSTANCE.initServer(context)
|
||||
|
||||
if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
|
||||
//不处理
|
||||
@@ -34,7 +36,7 @@ class V2XProvider : IMoGoFunctionServerProvider {
|
||||
|
||||
override fun onDestroy() {
|
||||
VipCarManager.INSTANCE.destroy()
|
||||
|
||||
TrafficLightDispatcher.INSTANCE.destroy()
|
||||
if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
|
||||
//不处理
|
||||
} else {
|
||||
|
||||
@@ -49,10 +49,10 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 {
|
||||
mThreadHandler =
|
||||
TrafficLightThreadHandler(Looper.getMainLooper(), {
|
||||
//查询路口时,如果红绿灯显示,则隐藏掉
|
||||
if (TrafficLightHMIManager.INSTANCE.isWarningTrafficLightShow()) {
|
||||
TrafficLightHMIManager.INSTANCE.hideTrafficLight()
|
||||
CallTrafficLightListenerManager.resetTrafficLightData()
|
||||
}
|
||||
// if (TrafficLightHMIManager.INSTANCE.isWarningTrafficLightShow()) {
|
||||
// TrafficLightHMIManager.INSTANCE.hideTrafficLight()
|
||||
// CallTrafficLightListenerManager.resetTrafficLightData()
|
||||
// }
|
||||
mLocation?.let { it ->
|
||||
val tileId = CallerMapUIServiceManager.getMapUIController()?.getTileId(it.longitude, it.latitude) ?: 0
|
||||
trafficLightNetWorkModel.requestRoadID(
|
||||
@@ -78,7 +78,7 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 {
|
||||
trafficLightNetWorkModel.requestTrafficLight(
|
||||
it.latitude, it.longitude, it.bearing.toDouble(), road, { result ->
|
||||
trafficLightResult = result
|
||||
TrafficLightHMIManager.INSTANCE.updateTrafficLight(result)
|
||||
// TrafficLightHMIManager.INSTANCE.updateTrafficLight(result)
|
||||
CallTrafficLightListenerManager.invokeTrafficLightStatus(result)
|
||||
},
|
||||
{ errorMsg ->
|
||||
@@ -99,6 +99,10 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 {
|
||||
2_000L
|
||||
)
|
||||
}
|
||||
if (TrafficLightHMIManager.INSTANCE.isWarningTrafficLightShow()) {
|
||||
TrafficLightHMIManager.INSTANCE.hideTrafficLight()
|
||||
CallTrafficLightListenerManager.resetTrafficLightData()
|
||||
}
|
||||
})
|
||||
}
|
||||
}, {
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
package com.mogo.eagle.core.function.v2x.trafficlight.core
|
||||
|
||||
import android.content.Context
|
||||
import com.mogo.eagle.core.data.trafficlight.TrafficLightResult
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener
|
||||
import com.mogo.eagle.core.function.api.trafficlight.IMoGoTrafficLightListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
|
||||
import com.mogo.eagle.core.function.call.trafficlight.CallTrafficLightListenerManager
|
||||
import com.mogo.eagle.core.function.v2x.trafficlight.TrafficLightHMIManager
|
||||
import perception.TrafficLightOuterClass
|
||||
import perception.TrafficLightOuterClass.TrafficLight
|
||||
|
||||
/**
|
||||
* @author XuXinChao
|
||||
* @description 对多个红绿灯信号来源进行统一调度(AI云、工控机)
|
||||
* @since: 2022/4/28
|
||||
*/
|
||||
class TrafficLightDispatcher : IMoGoAutopilotIdentifyListener , IMoGoTrafficLightListener {
|
||||
|
||||
companion object{
|
||||
const val TAG = "TrafficLightDispatcher"
|
||||
val INSTANCE: TrafficLightDispatcher by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED){
|
||||
TrafficLightDispatcher()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private var mContext: Context? = null
|
||||
//是否有AI获取红绿灯灯态
|
||||
private var hasAiLightStatus: Boolean = false
|
||||
|
||||
fun initServer(context: Context){
|
||||
mContext = context
|
||||
//注册监听AI云获取红绿灯状态
|
||||
CallTrafficLightListenerManager.registerTrafficLightListener(TAG, this)
|
||||
//注册监听AI云进入路口
|
||||
CallTrafficLightListenerManager.registerEnterCrossRoadListener(TAG, this)
|
||||
//注册监听工控机感知红绿灯
|
||||
CallerAutopilotIdentifyListenerManager.addListener(TAG, this)
|
||||
}
|
||||
|
||||
/**
|
||||
* 工控机感知红绿灯
|
||||
* @param trafficLights 感知红绿灯
|
||||
*/
|
||||
override fun onAutopilotPerceptionTrafficLight(trafficLights: TrafficLightOuterClass.TrafficLights?) {
|
||||
if(!hasAiLightStatus){
|
||||
trafficLights?.let { it ->
|
||||
var light :TrafficLight?= null
|
||||
if(it.hasStraight()){
|
||||
light = it.straight
|
||||
}else if(it.hasLeft()){
|
||||
light = it.left
|
||||
}else if(it.hasRight()){
|
||||
light = it.right
|
||||
}else if(it.hasUTurn()){
|
||||
light = it.uTurn
|
||||
}
|
||||
if(light == null){
|
||||
//隐藏红绿灯显示
|
||||
CallerHmiManager.showWarningTrafficLight(0)
|
||||
}else{
|
||||
when (light.state) {
|
||||
TrafficLightOuterClass.LightState.STATE_RED -> {
|
||||
//红灯
|
||||
CallerHmiManager.showWarningTrafficLight(1)
|
||||
CallerHmiManager.changeCountdownGreen(0)
|
||||
}
|
||||
TrafficLightOuterClass.LightState.STATE_YELLOW -> {
|
||||
//黄灯
|
||||
CallerHmiManager.showWarningTrafficLight(2)
|
||||
CallerHmiManager.changeCountdownGreen(0)
|
||||
}
|
||||
TrafficLightOuterClass.LightState.STATE_GREEN -> {
|
||||
//绿灯
|
||||
CallerHmiManager.showWarningTrafficLight(3)
|
||||
CallerHmiManager.changeCountdownGreen(0)
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* AI云获取红绿灯状态
|
||||
*/
|
||||
override fun onTrafficLightStatus(trafficLightResult: TrafficLightResult) {
|
||||
TrafficLightHMIManager.INSTANCE.updateTrafficLight(trafficLightResult)
|
||||
hasAiLightStatus = true
|
||||
}
|
||||
|
||||
/**
|
||||
* 车辆进入路口
|
||||
*/
|
||||
override fun onEnterCrossRoad(enter: Boolean) {
|
||||
hasAiLightStatus = enter
|
||||
}
|
||||
|
||||
fun destroy(){
|
||||
//取消注册监听AI云获取红绿灯状态
|
||||
CallTrafficLightListenerManager.unRegisterTrafficLightListener(TAG)
|
||||
//取消注册监听工控机感知红绿灯
|
||||
CallerAutopilotIdentifyListenerManager.removeListener(TAG)
|
||||
//取消注册监听AI云进入路口
|
||||
CallTrafficLightListenerManager.unRegisterEnterCrossRoadListener(TAG)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import java.io.Serializable
|
||||
* 不建议自己初始化此对象,建议使用 CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo();
|
||||
*
|
||||
*/
|
||||
class AutopilotStatusInfo : Serializable {
|
||||
open class AutopilotStatusInfo : Serializable, Cloneable {
|
||||
/**
|
||||
* 当前链接的IP地址, 默认地址 192.168.1.102
|
||||
*/
|
||||
@@ -20,6 +20,7 @@ class AutopilotStatusInfo : Serializable {
|
||||
*/
|
||||
var connectPort: Int = 4110
|
||||
var connectStatus = false
|
||||
|
||||
/**
|
||||
* 工控机连接状态文字描述
|
||||
*/
|
||||
@@ -74,11 +75,23 @@ class AutopilotStatusInfo : Serializable {
|
||||
*/
|
||||
var pilotmode = 0
|
||||
|
||||
// 默认未连接
|
||||
var ipcConnStatus = 0x01
|
||||
|
||||
override fun toString(): String {
|
||||
return "AutopilotStatusInfo(connectIP=$connectIP, connectPort=$connectPort, " +
|
||||
return "connectIP=$connectIP, connectPort=$connectPort, " +
|
||||
"connectStatus=$connectStatus, connectDescribe=$connectStatusDescribe, version=$version, dockVersion=$dockVersion," +
|
||||
" locationStatus=$locationStatus), locationLat=$locationLat, locationLon=$locationLon," +
|
||||
" satelliteTime=$satelliteTime, speed=$speed, state=$state, reason=$reason, camera=$camera," +
|
||||
" radar=$radar, rtk=$rtk, pilotmode=$pilotmode)"
|
||||
" radar=$radar, rtk=$rtk, pilotmode=$pilotmode, ipcConnStatus=$ipcConnStatus"
|
||||
}
|
||||
|
||||
public override fun clone(): AutopilotStatusInfo {
|
||||
try {
|
||||
return super.clone() as AutopilotStatusInfo
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
return AutopilotStatusInfo()
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.mogo.eagle.core.data.bindingcar;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author lixiaopeng
|
||||
@@ -8,24 +9,25 @@ import java.io.Serializable;
|
||||
* @since 3/16/22
|
||||
*/
|
||||
public class CarInfo implements Serializable {
|
||||
// compare为0 是表示车辆未绑定ipad sn
|
||||
// compare为0 是表示车辆未绑定ipad sn
|
||||
// compare为1 是表示车辆已绑定ipad sn 并且 与所传appsn一致
|
||||
// compare为2 是表示cmdb车辆没有真实绑定ipad
|
||||
// compare为3 是表示车辆已绑定ipad sn 并且 与所传appsn不一致
|
||||
private int compare;
|
||||
private String old_version;
|
||||
private String vendor; //销售商
|
||||
private String series; //类别
|
||||
private String model; //款式
|
||||
private String new_version;
|
||||
private String brand; //品牌
|
||||
private String energy_type; //驱动类型
|
||||
private String compare;
|
||||
private String old_version;
|
||||
private String vendor; //销售商
|
||||
private String series; //类别
|
||||
private String model; //款式
|
||||
private String new_version;
|
||||
private String brand; //品牌
|
||||
private String energy_type; //驱动类型
|
||||
private List<String> passenger; //乘客数量
|
||||
|
||||
public int getCompare() {
|
||||
public String getCompare() {
|
||||
return compare;
|
||||
}
|
||||
|
||||
public void setCompare(int compare) {
|
||||
public void setCompare(String compare) {
|
||||
this.compare = compare;
|
||||
}
|
||||
|
||||
@@ -85,6 +87,14 @@ public class CarInfo implements Serializable {
|
||||
this.energy_type = energy_type;
|
||||
}
|
||||
|
||||
public List<String> getPassenger() {
|
||||
return passenger;
|
||||
}
|
||||
|
||||
public void setPassenger(List<String> passenger) {
|
||||
this.passenger = passenger;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CarInfo{" +
|
||||
@@ -96,7 +106,7 @@ public class CarInfo implements Serializable {
|
||||
", new_version='" + new_version + '\'' +
|
||||
", brand='" + brand + '\'' +
|
||||
", energy_type='" + energy_type + '\'' +
|
||||
", passenger=" + passenger +
|
||||
'}';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.mogo.eagle.core.data.bindingcar
|
||||
|
||||
/**
|
||||
* @author XuXinChao
|
||||
* @description 工控机镜像升级状态实体类
|
||||
* @since: 2022/5/12
|
||||
*/
|
||||
data class IPCUpgradeStateInfo(
|
||||
val callback_url: String,
|
||||
val images: List<String>,
|
||||
val progress: Progress,
|
||||
val release_id: String,
|
||||
val status: String,
|
||||
val token: String
|
||||
)
|
||||
|
||||
data class Progress(
|
||||
val id: String,
|
||||
val progressDetail: ProgressDetail,
|
||||
val status: String
|
||||
)
|
||||
|
||||
data class ProgressDetail(
|
||||
val current: Int,
|
||||
val total: Int
|
||||
)
|
||||
@@ -8,18 +8,22 @@ class ChainConstant {
|
||||
const val CHAIN_LINK_ADAS = 1
|
||||
|
||||
const val CHAIN_LINK_LOG_CONNECT_STATUS = 0
|
||||
const val CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT = 1
|
||||
const val CHAIN_LINK_LOG_WEB_SOCKET_DATA_TRACKED = 2
|
||||
const val CHAIN_LINK_LOG_WEB_SOCKET_TRAJECTORY = 3
|
||||
const val CHAIN_LINK_LOG_WEB_SOCKET_VEHICLE = 4
|
||||
const val CHAIN_LINK_LOG_WEB_SOCKET_GNSSINFO = 1
|
||||
const val CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT = 2
|
||||
const val CHAIN_LINK_LOG_WEB_SOCKET_DATA_TRACKED = 3
|
||||
const val CHAIN_LINK_LOG_WEB_SOCKET_TRAJECTORY = 4
|
||||
const val CHAIN_LINK_LOG_WEB_SOCKET_VEHICLE = 5
|
||||
const val CHAIN_LINK_LOG_WEB_SOCKET_TRAFFIC_LIGHT = 6
|
||||
|
||||
const val CHAIN_LINK_LOG_ADAS_INIT = "-adasInitStatus"
|
||||
const val CHAIN_LINK_LOG_ADAS_INIT = "-eagleInitStatus"
|
||||
const val CHAIN_LINK_LOG_ADAS_GNSS = "-adasWsGnssInfo"
|
||||
const val CHAIN_LINK_LOG_ADAS_AUTO = "-adasWsAutoPilot"
|
||||
const val CHAIN_LINK_LOG_ADAS_DATA_TRACK = "-adasWsDataTrack"
|
||||
const val CHAIN_LINK_LOG_ADAS_TRAJECTORY = "-adasWsTrajectory"
|
||||
const val CHAIN_LINK_LOG_ADAS_VEHICLE = "-adasWsVehicle"
|
||||
const val CHAIN_LINK_LOG_ADAS_TRAFFIC_LIGHT = "-adasWsTrafficLight"
|
||||
|
||||
|
||||
const val CHAIN_ALIAS_CODE_MULTI_CONNECT = "CHAIN_ALIAS_CODE_MULTI_CONNECT"
|
||||
const val CHAIN_ALIAS_CODE_ADAS_MESSAGE_RECT_DATA = "PAD_ADAS_MESSAGE_AUTOPILOT_RECT_DATA"
|
||||
const val CHAIN_ALIAS_CODE_ADAS_MESSAGE_CAR_STATE = "PAD_ADAS_MESSAGE_AUTOPILOT_CAR_STATE"
|
||||
const val CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_STATUS = "PAD_ADAS_MESSAGE_AUTOPILOT_STATUS"
|
||||
@@ -29,8 +33,13 @@ class ChainConstant {
|
||||
const val CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_GUARDIAN = "PAD_ADAS_MESSAGE_AUTOPILOT_GUARDIAN"
|
||||
const val CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_RECORD = "PAD_ADAS_MESSAGE_AUTOPILOT_RECORD"
|
||||
const val CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_VEHICLE = "PAD_ADAS_MESSAGE_AUTOPILOT_VEHICLE"
|
||||
const val CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_TRAFFIC_LIGHT = "PAD_ADAS_MESSAGE_AUTOPILOT_TRAFFIC_LIGHT"
|
||||
const val CHAIN_ALIAS_CODE_ADAS_MESSAGE_AUTOPILOT_WARN = "PAD_ADAS_MESSAGE_AUTOPILOT_WARN"
|
||||
|
||||
const val CHAIN_ALIAS_CODE_CLOUD_CONNECT_FAIL = "CHAIN_ALIAS_CODE_CLOUD_CONNECT_FAIL"
|
||||
const val CHAIN_ALIAS_CODE_CLOUD_CONNECT_SUCCESS = "CHAIN_ALIAS_CODE_CLOUD_CONNECT_SUCCESS"
|
||||
const val CHAIN_ALIAS_CODE_CLOUD_CONNECT_LOST = "CHAIN_ALIAS_CODE_CLOUD_CONNECT_LOST"
|
||||
|
||||
//operation by user
|
||||
const val CHAIN_ALIAS_CODE_OCH_BUS_START_AUTOPILOT = "CHAIN_ALIAS_CODE_OCH_BUS_START_AUTOPILOT"
|
||||
const val CHAIN_ALIAS_CODE_OCH_TAXI_START_AUTOPILOT = "CHAIN_ALIAS_CODE_OCH_TAXI_START_AUTOPILOT"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.mogo.eagle.core.function.api.autopilot
|
||||
|
||||
import mogo.telematics.pad.MessagePad
|
||||
import perception.TrafficLightOuterClass
|
||||
|
||||
/**
|
||||
* @author xiaoyuzhou
|
||||
@@ -23,4 +24,10 @@ interface IMoGoAutopilotIdentifyListener {
|
||||
*/
|
||||
fun onAutopilotWarnMessage(warn: MessagePad.Warn?) {}
|
||||
|
||||
/**
|
||||
* 感知红绿灯
|
||||
* @param trafficLights 感知红绿灯
|
||||
*/
|
||||
fun onAutopilotPerceptionTrafficLight(trafficLights: TrafficLightOuterClass.TrafficLights?){}
|
||||
|
||||
}
|
||||
@@ -34,12 +34,6 @@ interface IMoGoAutopilotProvider : IMoGoFunctionServerProvider {
|
||||
*/
|
||||
fun sendTrafficLightData(trafficLightResult: TrafficLightResult)
|
||||
|
||||
/**
|
||||
* 发送json数据给 Autopilot 自动驾驶控制器
|
||||
* 具体的json格式需要与@宋克难 进行沟通
|
||||
*/
|
||||
fun sendMessageToAutopilot(jsonString: String)
|
||||
|
||||
/**
|
||||
* 结束自动驾驶
|
||||
*/
|
||||
|
||||