From bf9cf9fb330ff896615a209207a7839369158f90 Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Wed, 16 Dec 2020 15:09:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=B7=A6=E4=B8=8A=E8=A7=92?= =?UTF-8?q?=E7=BA=A2=E7=BB=BF=E7=81=AF=E5=B1=95=E7=A4=BA=EF=BC=8C=E6=9A=82?= =?UTF-8?q?=E6=97=A0=E8=BD=A6=E9=81=93=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constants/TrafficLightConst.java | 18 ++++ .../extensions/navi/VrModeNavInfoView.java | 15 +++ .../extensions/utils/AdasNoticeHelper.java | 96 +++++-------------- .../view/VerticalTrafficLightView.java | 14 +-- .../main/res/layout/include_navi_in_vr.xml | 2 +- .../com/zhidao/mogo/module/obu/MockUtil.kt | 2 +- .../obu/obu/bean/MogoObuTrafficLightInfo.kt | 71 ++++++++++++-- .../com/mogo/module/v2x/V2XObuManager.java | 5 + 8 files changed, 132 insertions(+), 91 deletions(-) create mode 100644 modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/TrafficLightConst.java diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/TrafficLightConst.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/TrafficLightConst.java new file mode 100644 index 0000000000..f543e4b242 --- /dev/null +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/TrafficLightConst.java @@ -0,0 +1,18 @@ +package com.mogo.module.common.constants; + +/** + * 用于内部标识红绿灯颜色 + * + * @author tongchenfei + */ +public class TrafficLightConst { + public static final int TRAFFIC_LIGHT_COLOR_GRAY = 0; + public static final int TRAFFIC_LIGHT_COLOR_RED = 1; + public static final int TRAFFIC_LIGHT_COLOR_YELLOW = 2; + public static final int TRAFFIC_LIGHT_COLOR_GREEN = 3; + + public static final int TRAFFIC_LIGHT_DIRECTION_TURN_AROUND = 0; + public static final int TRAFFIC_LIGHT_DIRECTION_TURN_LEFT = 1; + public static final int TRAFFIC_LIGHT_DIRECTION_STRAIGHT = 2; + public static final int TRAFFIC_LIGHT_DIRECTION_TURN_RIGHT = 3; +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/VrModeNavInfoView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/VrModeNavInfoView.java index f736c8b38d..43b17f467a 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/VrModeNavInfoView.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/navi/VrModeNavInfoView.java @@ -88,6 +88,9 @@ public class VrModeNavInfoView extends BaseNaviInfoView implements Handler.Callb } } + private int[] lightArray = new int[4]; + private String[] surplusTimeArray = new String[4]; + /** * 刷新红绿灯显示状态 * @@ -95,10 +98,22 @@ public class VrModeNavInfoView extends BaseNaviInfoView implements Handler.Callb * @param surplusTime 固定数组长度为4的剩余时长数组,从0-3依次代表 掉头,左转,执行,右转 */ public void refreshTrafficLightStatus(int[] laneLight, String[] surplusTime) { + lightArray = laneLight; + surplusTimeArray = surplusTime; + turnAroundLight.setTrafficLightStatus(laneLight[0], surplusTime[0]); turnLeftLight.setTrafficLightStatus(laneLight[1], surplusTime[1]); straightLight.setTrafficLightStatus(laneLight[2], surplusTime[2]); turnRightLight.setTrafficLightStatus(laneLight[3], surplusTime[3]); + // todo 再根据当前所在车道,置灰不需关注的灯 + + } + + /** + * 根据所在车道,控制红绿灯展示 + */ + public void refreshLaneStatus(){ + } @Override diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/AdasNoticeHelper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/AdasNoticeHelper.java index 0eb32beb06..b27e21bfd1 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/AdasNoticeHelper.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/AdasNoticeHelper.java @@ -21,6 +21,7 @@ import com.mogo.service.connection.IMogoOnWebSocketMessageListener; import com.mogo.service.connection.WebSocketMsgType; import com.mogo.utils.logger.Logger; +import org.json.JSONArray; import org.json.JSONObject; /** @@ -33,9 +34,9 @@ public class AdasNoticeHelper implements IMogoAdasWarnMessageCallback, IMogoLoca private static final String TAG = "AdasNoticeHelper"; private static final int MSG_HIDE_TRAFFIC_LIGHT_BY_OBU = 1001; - private static final int MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD = 1002; +// private static final int MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD = 1002; 先去掉云端下发红绿灯信息 private static final int MSG_HIDE_LIMIT_SPEED = 1003; - private static final int MSG_REFRESH_CAR_STRATEGY = 1004; +// private static final int MSG_REFRESH_CAR_STRATEGY = 1004; private static final long HIDE_TRAFFIC_LIGHT_DELAY = 2_000L; private static final long HIDE_LIMIT_SPEED_DELAY = 10_000L; @@ -53,23 +54,14 @@ public class AdasNoticeHelper implements IMogoAdasWarnMessageCallback, IMogoLoca private VrModeNavInfoView vrModeNavInfoView; - private Handler handler = new Handler(this); - - private boolean isObuLightData = false; - - - private boolean lightCenter = true; + private final Handler handler = new Handler(this); public void init(Context context) { this.context = context; - if (!lightCenter) { - } Logger.d(TAG, "init===="); } public void initView(VrModeNavInfoView vrModeNavInfoView) { - if (lightCenter) { - } this.vrModeNavInfoView = vrModeNavInfoView; } @@ -84,10 +76,9 @@ public class AdasNoticeHelper implements IMogoAdasWarnMessageCallback, IMogoLoca context.registerReceiver(adasReceiver, filter); MogoApisHandler.getInstance().getApis().getAdasControllerApi().addAdasWarnMessageCallback(this); MogoApisHandler.getInstance().getApis().getRegisterCenterApi().registerMogoLocationListener(TAG, this); - MogoApisHandler.getInstance().getApis().getWebSocketManagerApi(context).registerOnWebSocketMessageListener(this); - if (!lightCenter) { - handler.sendEmptyMessageDelayed(MSG_REFRESH_CAR_STRATEGY, STRATEGY_DELAY); - } + // 先不监听服务端下发消息 +// MogoApisHandler.getInstance().getApis().getWebSocketManagerApi(context).registerOnWebSocketMessageListener(this); + } } @@ -96,11 +87,9 @@ public class AdasNoticeHelper implements IMogoAdasWarnMessageCallback, IMogoLoca if (isVrMode) { isVrMode = false; MogoApisHandler.getInstance().getApis().getAdasControllerApi().showADAS(); - handler.removeMessages(MSG_REFRESH_CAR_STRATEGY); MogoApisHandler.getInstance().getApis().getAdasControllerApi().removeAdasWarnMessageCallback(this); MogoApisHandler.getInstance().getApis().getRegisterCenterApi().unregisterMogoLocationListener(TAG); - MogoApisHandler.getInstance().getApis().getWebSocketManagerApi(context).unregisterOnWebSocketMessageListener(this); - +// MogoApisHandler.getInstance().getApis().getWebSocketManagerApi(context).unregisterOnWebSocketMessageListener(this); context.unregisterReceiver(adasReceiver); } } @@ -129,44 +118,15 @@ public class AdasNoticeHelper implements IMogoAdasWarnMessageCallback, IMogoLoca return; } currentSpeed = (int) (location.getSpeed() * 3.6F); - if (lightCenter) { - } } @Override public boolean handleMessage(Message msg) { switch (msg.what) { - case MSG_REFRESH_CAR_STRATEGY: - // todo 暂时不采用此种渲染方式 - // 自车速度 - // todo 设置字体颜色、背景颜色、leftDrawable - switch (lightStatus) { - case "Y": - // 黄灯 - break; - case "R": - // 红灯 - break; - default: - // 默认绿灯 - break; - } - - if (isVrMode) { - handler.sendEmptyMessageDelayed(MSG_REFRESH_CAR_STRATEGY, STRATEGY_DELAY); - } - return true; case MSG_HIDE_LIMIT_SPEED: limitSpeed = -1; return true; - case MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD: - if (!isObuLightData && !handler.hasMessages(MSG_HIDE_TRAFFIC_LIGHT_BY_OBU)) { - } - return true; case MSG_HIDE_TRAFFIC_LIGHT_BY_OBU: - isObuLightData = false; - if (!handler.hasMessages(MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD)) { - } return true; default: return false; @@ -209,7 +169,17 @@ public class AdasNoticeHelper implements IMogoAdasWarnMessageCallback, IMogoLoca String lightStatus = jsonObject.optString("lightStatus"); String surplusTime = jsonObject.optString("surplusTime"); if (!lightStatus.isEmpty() && !surplusTime.isEmpty()) { - handleObuTrafficLightInfo(lightStatus, surplusTime); +// String strArray = jsonObject.getString("lightArray"); +// Logger.d(TAG, "strArray: " + strArray); + JSONArray lightJsonArray = jsonObject.getJSONArray("lightArray"); + JSONArray timeJsonArray = jsonObject.getJSONArray("surplusTimeArray"); + int[] lightArray = new int[4]; + String[] surplusTimeArray = new String[4]; + for (int i = 0; i < 4; i++) { + lightArray[i] = lightJsonArray.getInt(i); + surplusTimeArray[i] = timeJsonArray.getString(i); + } + handleObuTrafficLightInfo(lightArray, surplusTimeArray); } else { Logger.d(TAG, "红绿灯必要信息都为空,不做展示"); } @@ -224,22 +194,8 @@ public class AdasNoticeHelper implements IMogoAdasWarnMessageCallback, IMogoLoca } } - private void handleObuTrafficLightInfo(String lightStatus, String surplusTime) { - isObuLightData = true; - } - - private void handleCloudTrafficLight(CloudRoadData roadData) { - if (isObuLightData) { - handler.removeMessages(MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD); - return; - } - } - - private void drawTrafficLight(String lightStatus, String surplusTime) { - this.lightStatus = lightStatus; - this.surplusTime = surplusTime; - if (lightCenter) { - } + private void handleObuTrafficLightInfo(int[] lightArray,String[] surplusTimeArray) { + vrModeNavInfoView.refreshTrafficLightStatus(lightArray, surplusTimeArray); } @Override @@ -254,14 +210,6 @@ public class AdasNoticeHelper implements IMogoAdasWarnMessageCallback, IMogoLoca @Override public void onMsgReceived(MogoSnapshotSetData obj) { - Logger.d(TAG, "收到大而全数据: " + obj); - CloudRoadData roadData = obj.getTrafficLight(); - if (roadData != null) { - Logger.d(TAG, "收到红绿灯数据"); - handleCloudTrafficLight(roadData); - } else { - handler.sendEmptyMessage(MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD); - } - } + } } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/view/VerticalTrafficLightView.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/view/VerticalTrafficLightView.java index e16882fbcb..aa20aae227 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/view/VerticalTrafficLightView.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/view/VerticalTrafficLightView.java @@ -13,12 +13,18 @@ import androidx.annotation.IntDef; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.Group; +import com.mogo.module.common.constants.TrafficLightConst; import com.mogo.module.extensions.R; import com.mogo.utils.logger.Logger; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import static com.mogo.module.common.constants.TrafficLightConst.TRAFFIC_LIGHT_COLOR_GRAY; +import static com.mogo.module.common.constants.TrafficLightConst.TRAFFIC_LIGHT_COLOR_GREEN; +import static com.mogo.module.common.constants.TrafficLightConst.TRAFFIC_LIGHT_COLOR_RED; +import static com.mogo.module.common.constants.TrafficLightConst.TRAFFIC_LIGHT_COLOR_YELLOW; + /** * vr模式下的纵向显示的红绿灯封装 * @@ -26,10 +32,6 @@ import java.lang.annotation.RetentionPolicy; */ public class VerticalTrafficLightView extends ConstraintLayout { private static final String TAG = "VerticalTrafficLightView"; - public static final int TRAFFIC_LIGHT_COLOR_GRAY = 0; - public static final int TRAFFIC_LIGHT_COLOR_RED = 1; - public static final int TRAFFIC_LIGHT_COLOR_YELLOW = 2; - public static final int TRAFFIC_LIGHT_COLOR_GREEN = 3; private ImageView ivTrafficLight, ivNoLeftTime; private TextView tvLeftTime, tvLeftTimeUnit; @@ -90,7 +92,7 @@ public class VerticalTrafficLightView extends ConstraintLayout { /** * 设置红绿灯的颜色,根据颜色来展示不同的效果 * - * @param color 红绿灯颜色{@link #TRAFFIC_LIGHT_COLOR_GRAY},{@link #TRAFFIC_LIGHT_COLOR_RED}等四个颜色 + * @param color 红绿灯颜色{@link TrafficLightConst#TRAFFIC_LIGHT_COLOR_GRAY},{@link TrafficLightConst#TRAFFIC_LIGHT_COLOR_RED}等四个颜色 */ private void setTrafficLightColor(@TrafficLightColor int color) { if (iconRes == null) { @@ -123,7 +125,7 @@ public class VerticalTrafficLightView extends ConstraintLayout { /** * 设置红绿灯状态,需设置颜色及时长 * - * @param color 红绿灯颜色,使用{@link #TRAFFIC_LIGHT_COLOR_RED}等四个值 + * @param color 红绿灯颜色,使用{@link TrafficLightConst#TRAFFIC_LIGHT_COLOR_RED}等四个值 * @param leftTime 剩余时长,null或者empty表示没有时长数据 */ public void setTrafficLightStatus(@TrafficLightColor int color, String leftTime) { diff --git a/modules/mogo-module-extensions/src/main/res/layout/include_navi_in_vr.xml b/modules/mogo-module-extensions/src/main/res/layout/include_navi_in_vr.xml index e6efac5899..1a2d4c4241 100644 --- a/modules/mogo-module-extensions/src/main/res/layout/include_navi_in_vr.xml +++ b/modules/mogo-module-extensions/src/main/res/layout/include_navi_in_vr.xml @@ -39,7 +39,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/module_ext_navi_in_vr_speed_margin_start" - android:text="78" + android:text="--" android:textColor="#fff" android:textSize="@dimen/module_ext_navi_in_vr_speed_text_size" app:layout_constraintBottom_toTopOf="@id/module_ext_id_navi_in_vr_traffic_bg" diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/MockUtil.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/MockUtil.kt index 68e61eb3c7..b67be3a6fe 100644 --- a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/MockUtil.kt +++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/MockUtil.kt @@ -45,7 +45,7 @@ class MockUtil:Handler.Callback { if (msg.what == 1001) { Logger.d(TAG,"准备添加调试view") val api = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(context) as IMogoServiceApis - api.windowManagerApi.addView(view, 1000, 600, false) + api.windowManagerApi.addView(view, 500, 300, false) } return false } diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/bean/MogoObuTrafficLightInfo.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/bean/MogoObuTrafficLightInfo.kt index 33437fedd1..0930bbedc2 100644 --- a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/bean/MogoObuTrafficLightInfo.kt +++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/bean/MogoObuTrafficLightInfo.kt @@ -1,5 +1,6 @@ package com.zhidao.mogo.module.obu.obu.bean +import com.mogo.module.common.constants.TrafficLightConst.* import com.zhidao.smartv2x.model.obu.TrafficLightInfo /** @@ -10,20 +11,72 @@ import com.zhidao.smartv2x.model.obu.TrafficLightInfo * * @author tongchenfei */ -class MogoObuTrafficLightInfo(){ - var id:String? =null - var lightStatus:String? =null - var surplusTime:String? =null - var lightPriority:String? =null - override fun toString(): String { - return "MogoObuTrafficLightInfo(id=$id, lightStatus=$lightStatus, surplusTime=$surplusTime, lightPriority=$lightPriority)" - } +class MogoObuTrafficLightInfo() { + var id: String? = null + var lightStatus: String? = null + set(value) { + field = value + resetLightArray(value) + } + var surplusTime: String? = null + set(value) { + field = value + resetSurplusTimeArray(value) + } + var lightPriority: String? = null - constructor(info:TrafficLightInfo):this(){ + var lightArray: IntArray = IntArray(4) { 0 } + var surplusTimeArray: Array = Array(4) { "" } + + constructor(info: TrafficLightInfo) : this() { this.id = info.id this.lightStatus = info.lightStatus this.surplusTime = info.surplusTime this.lightPriority = info.lightPriority + + resetLightArray(lightStatus) + resetSurplusTimeArray(surplusTime) + } + + override fun toString(): String { + return "MogoObuTrafficLightInfo(id=$id, lightStatus=$lightStatus, surplusTime=$surplusTime, lightPriority=$lightPriority, lightArray=${lightArray.contentToString()}, surplusTimeArray=${surplusTimeArray.contentToString()})" + } + + private fun resetLightArray(lightStatus: String?) { + when (lightStatus) { + "R" -> { + lightArray[TRAFFIC_LIGHT_DIRECTION_TURN_AROUND] = TRAFFIC_LIGHT_COLOR_GREEN + lightArray[TRAFFIC_LIGHT_DIRECTION_TURN_LEFT] = TRAFFIC_LIGHT_COLOR_RED + lightArray[TRAFFIC_LIGHT_DIRECTION_STRAIGHT] = TRAFFIC_LIGHT_COLOR_RED + lightArray[TRAFFIC_LIGHT_DIRECTION_TURN_RIGHT] = TRAFFIC_LIGHT_COLOR_GREEN + + } + "Y" -> { + lightArray[TRAFFIC_LIGHT_DIRECTION_TURN_AROUND] = TRAFFIC_LIGHT_COLOR_GREEN + lightArray[TRAFFIC_LIGHT_DIRECTION_TURN_LEFT] = TRAFFIC_LIGHT_COLOR_YELLOW + lightArray[TRAFFIC_LIGHT_DIRECTION_STRAIGHT] = TRAFFIC_LIGHT_COLOR_YELLOW + lightArray[TRAFFIC_LIGHT_DIRECTION_TURN_RIGHT] = TRAFFIC_LIGHT_COLOR_GREEN + } + "G" -> { + lightArray[TRAFFIC_LIGHT_DIRECTION_TURN_AROUND] = TRAFFIC_LIGHT_COLOR_GREEN + lightArray[TRAFFIC_LIGHT_DIRECTION_TURN_LEFT] = TRAFFIC_LIGHT_COLOR_GREEN + lightArray[TRAFFIC_LIGHT_DIRECTION_STRAIGHT] = TRAFFIC_LIGHT_COLOR_GREEN + lightArray[TRAFFIC_LIGHT_DIRECTION_TURN_RIGHT] = TRAFFIC_LIGHT_COLOR_GREEN + } + else -> { + lightArray[TRAFFIC_LIGHT_DIRECTION_TURN_AROUND] = TRAFFIC_LIGHT_COLOR_GRAY + lightArray[TRAFFIC_LIGHT_DIRECTION_TURN_LEFT] = TRAFFIC_LIGHT_COLOR_GRAY + lightArray[TRAFFIC_LIGHT_DIRECTION_STRAIGHT] = TRAFFIC_LIGHT_COLOR_GRAY + lightArray[TRAFFIC_LIGHT_DIRECTION_TURN_RIGHT] = TRAFFIC_LIGHT_COLOR_GRAY + } + } + } + + private fun resetSurplusTimeArray(surplusTime: String?) { + surplusTimeArray[TRAFFIC_LIGHT_DIRECTION_TURN_AROUND] = "" + surplusTimeArray[TRAFFIC_LIGHT_DIRECTION_TURN_LEFT] = surplusTime ?: "" + surplusTimeArray[TRAFFIC_LIGHT_DIRECTION_STRAIGHT] = surplusTime ?: "" + surplusTimeArray[TRAFFIC_LIGHT_DIRECTION_TURN_RIGHT] = "" } } \ No newline at end of file diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java index fb4766fe4f..72141cfbdf 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java @@ -30,6 +30,7 @@ import com.zhidao.mogo.module.obu.obu.bean.MogoObuEventInfo; import com.zhidao.mogo.module.obu.obu.bean.MogoObuLocationInfo; import com.zhidao.mogo.module.obu.obu.bean.MogoObuTrafficLightInfo; +import org.json.JSONArray; import org.json.JSONObject; import java.util.Map; @@ -142,6 +143,10 @@ public class V2XObuManager implements IObuCallback, Handler.Callback { } else { json.put("surplusTime", trafficLightInfo.getSurplusTime()); } + JSONArray lightJsonArray = new JSONArray(trafficLightInfo.getLightArray()); + JSONArray surplusTimeJsonArray = new JSONArray(trafficLightInfo.getSurplusTimeArray()); + json.put("lightArray", lightJsonArray); + json.put("surplusTimeArray", surplusTimeJsonArray); } String data = json.toString(); Logger.d(MODULE_NAME, "发送红绿灯广播: " + data);