diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventScenario.java index 3defbed3f0..17f63180d6 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventScenario.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventScenario.java @@ -13,8 +13,6 @@ import com.mogo.service.windowview.IMogoTopViewStatusListener; import com.mogo.utils.logger.Logger; import com.mogo.utils.network.utils.GsonUtil; -import static com.mogo.module.v2x.V2XConst.MODULE_NAME; - /** * author : donghongyu * e-mail : 1358506549@qq.com @@ -25,6 +23,7 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; public class V2XPushVREventScenario extends AbsV2XScenario implements IMogoTopViewStatusListener { + private String TAG = "V2XPushVREventWindow"; private static V2XPushVREventScenario mV2XPushEventScenario; @@ -37,6 +36,7 @@ public class V2XPushVREventScenario if (mV2XPushEventScenario == null) { mV2XPushEventScenario = new V2XPushVREventScenario(); mV2XPushEventScenario.setV2XMarker(new V2XPushVREventMarker()); + mV2XPushEventScenario.setV2XWindow(new V2XPushVREventWindow()); } } } @@ -46,15 +46,17 @@ public class V2XPushVREventScenario @Override public void init(@Nullable V2XMessageEntity v2XMessageEntity) { - Logger.w(MODULE_NAME, "处理推送VR场景:" + GsonUtil.jsonFromObject(v2XMessageEntity)); + Logger.w(V2XConst.MODULE_NAME + "_" + TAG, "处理推送VR场景:" + GsonUtil.jsonFromObject(v2XMessageEntity)); if (!isSameScenario(v2XMessageEntity) && V2XServiceManager.getMoGoStatusManager().isMainPageLaunched()) { setV2XMessageEntity(v2XMessageEntity); show(); } else { + closeWindow(); setV2XMessageEntity(v2XMessageEntity); - Logger.w(V2XConst.MODULE_NAME, "要处理的场景已经存在,丢弃这次初始化"); + show(); + Logger.w(V2XConst.MODULE_NAME + "_" + TAG, "要处理的场景已经存在,丢弃这次初始化"); } } @@ -70,7 +72,7 @@ public class V2XPushVREventScenario @Override public void showWindow() { if (getV2XWindow() != null) { - //TODO 这里调用 showLeftNoticeByType 进行展示左下角的弹窗 + getV2XWindow().show(getV2XMessageEntity().getContent()); } } @@ -115,22 +117,22 @@ public class V2XPushVREventScenario //////////////////////////////////////////////////////////////////////////////////////////////////// @Override public void onViewAdded(View view) { - Logger.d(MODULE_NAME, "展示 Window 动画结束"); + Logger.d(V2XConst.MODULE_NAME + "_" + TAG, "展示 Window 动画结束"); } @Override public void onViewRemoved(View view) { - Logger.d(MODULE_NAME, "关闭 Window 动画结束"); + Logger.d(V2XConst.MODULE_NAME + "_" + TAG, "关闭 Window 动画结束"); } @Override public void beforeViewAddAnim(View view) { - Logger.d(MODULE_NAME, "展示 Window 开始"); + Logger.d(V2XConst.MODULE_NAME + "_" + TAG, "展示 Window 开始"); } @Override public void beforeViewRemoveAnim(View view) { - Logger.d(MODULE_NAME, "关闭 Window 开始"); + Logger.d(V2XConst.MODULE_NAME + "_" + TAG, "关闭 Window 开始"); V2XServiceManager.getMoGoV2XStatusManager().setPushWindowShow(TAG, false); // 重置场景提示的消息 setV2XMessageEntity(null); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventWindow.java new file mode 100644 index 0000000000..168cb90ec7 --- /dev/null +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventWindow.java @@ -0,0 +1,93 @@ +package com.mogo.module.v2x.scenario.scene.pushVR; + +import android.os.Handler; +import android.view.View; + +import com.mogo.module.common.entity.V2XPushMessageEntity; +import com.mogo.module.v2x.R; +import com.mogo.module.v2x.V2XServiceManager; +import com.mogo.module.v2x.listener.V2XWindowStatusListener; +import com.mogo.module.v2x.scenario.view.IV2XWindow; +import com.mogo.service.entrance.IMogoEntranceButtonController; +import com.mogo.utils.logger.Logger; + +import static com.mogo.module.v2x.V2XConst.MODULE_NAME; + +/** + * author : donghongyu + * e-mail : 1358506549@qq.com + * date : 2020/4/14 2:37 PM + * desc : + * TODO 只有VR演示场景使用 + * version: 1.0 + */ +public class V2XPushVREventWindow implements IV2XWindow { + private String TAG = "V2XPushVREventWindow"; + + // 处理道路事件,30秒倒计时 + private Handler handlerV2XEvent = new Handler(); + private Runnable runnableV2XEvent; + private int mExpireTime = 30000; + + /** + * 展示道路事件详情Windows + */ + @Override + public void show(V2XPushMessageEntity entity) { + Logger.d(MODULE_NAME + "_" + TAG, "V2X==VR=推送消息:展示 Window=\n" + entity); + + V2XServiceManager + .getMogoEntranceButtonController() + .showLeftNoticeByType( + IMogoEntranceButtonController.NOTICE_TYPE_CONGESTION_RECOMMENDED, + R.drawable.module_v2x_left_notice_seek_help, + entity.getAlarmContent()); + countDownV2XEvent(); + } + + /** + * 关闭详情展示框 + */ + @Override + public void close() { + Logger.d(MODULE_NAME + "_" + TAG, "V2X==VR=关闭Window"); + V2XServiceManager + .getMogoEntranceButtonController() + .hideLeftNoticeByType(IMogoEntranceButtonController.NOTICE_TYPE_CONGESTION_RECOMMENDED); + + // 停止倒计时 + if (handlerV2XEvent != null && runnableV2XEvent != null) { + handlerV2XEvent.removeCallbacks(runnableV2XEvent); + runnableV2XEvent = null; + } + + } + + @Override + public View getView() { + return null; + } + + @Override + public void setWindowStatusListener(V2XWindowStatusListener listener) { + } + + /** + * 窗体倒计时 + */ + public void countDownV2XEvent() { + // 倒计时 + if (runnableV2XEvent == null) { + runnableV2XEvent = () -> { + Logger.d(MODULE_NAME + "_" + TAG, "V2X==VR=30秒倒计时结束。。。"); + // 移出Window详细信息 + close(); + }; + } else { + handlerV2XEvent.removeCallbacks(runnableV2XEvent); + } + Logger.d(MODULE_NAME + "_" + TAG, "V2X==VR=推送消息 Window 展示开始倒计时:" + mExpireTime); + handlerV2XEvent.postDelayed(runnableV2XEvent, mExpireTime); + } + +} diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java index 0c151faece..bc5fa627bd 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java @@ -220,7 +220,7 @@ public class V2XTestConsoleWindow extends ConstraintLayout { * 逆向车辆路线预判 * */ btnTriggerReverseVehicleRoutePrediction.setOnClickListener(v -> { - V2XMessageEntity> v2XMessageEntity = + V2XMessageEntity v2XMessageEntity = TestOnLineCarUtils.getV2XScenarionVRReverseCarData(); Intent intent = new Intent(V2XConst.BROADCAST_SCENE_HANDLER_ACTION); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/TestOnLineCarUtils.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/TestOnLineCarUtils.java index d1dbaf1236..ecfe654b5b 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/TestOnLineCarUtils.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/TestOnLineCarUtils.java @@ -327,7 +327,7 @@ public class TestOnLineCarUtils { /** * 逆向车辆路线预判 */ - public static V2XMessageEntity> getV2XScenarionVRReverseCarData() { + public static V2XMessageEntity getV2XScenarionVRReverseCarData() { try { InputStream inputStream = V2XUtils.getApp() .getResources() @@ -341,14 +341,13 @@ public class TestOnLineCarUtils { inputStream.close(); // 加载数据源 - V2XSpecialCarRes v2xRoadEventEntity = - GsonUtil.objectFromJson(baos.toString(), V2XSpecialCarRes.class); + V2XPushMessageEntity v2xRoadEventEntity = GsonUtil.objectFromJson(baos.toString(), V2XPushMessageEntity.class); - V2XMessageEntity> v2xMessageEntity = new V2XMessageEntity<>(); + V2XMessageEntity v2xMessageEntity = new V2XMessageEntity<>(); // 控制类型 - v2xMessageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_WINDOW_WARNING); + v2xMessageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_VR_SHOW); // 设置数据 - v2xMessageEntity.setContent(v2xRoadEventEntity.getCoordinates()); + v2xMessageEntity.setContent(v2xRoadEventEntity); // 控制展示状态 v2xMessageEntity.setShowState(true); return v2xMessageEntity; diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/entrance/IMogoEntranceButtonController.java b/services/mogo-service-api/src/main/java/com/mogo/service/entrance/IMogoEntranceButtonController.java index d1e55e8f06..4d04c13d37 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/entrance/IMogoEntranceButtonController.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/entrance/IMogoEntranceButtonController.java @@ -57,6 +57,11 @@ public interface IMogoEntranceButtonController extends IProvider { */ int NOTICE_TYPE_OBSTACLE_CAR_WARN = 1010; + /** + * 拥堵路线推荐 + */ + int NOTICE_TYPE_CONGESTION_RECOMMENDED = 1011; + /** * 获取入口按钮实例 *