diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 2266035c7a..dbea2f06fd 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -105,6 +105,7 @@ public class MogoApplication extends AbsMogoApplication { // 小地图模块 MogoModulePaths.addModule( new MogoModule( MogoServicePaths.PATH_SMALL_MAP, "IMogoSmallMapProvider" ) ); + MogoModulePaths.addModule( new MogoModule( MogoServicePaths.PATH_V2X_FRONT_CRASH_WARNING, "IV2XManagerProvider" ) ); MogoModulePaths.addBaseModule( new MogoModule( MogoServicePaths.PATH_GLOBAL_UNWAKE, "GlobalUnwake" ) ); diff --git a/main-extensions/mogo-module-main-launcher/src/main/java/com/zhidao/mogo/module/main/launcher/MainLauncherActivity.java b/main-extensions/mogo-module-main-launcher/src/main/java/com/zhidao/mogo/module/main/launcher/MainLauncherActivity.java index 292ddc7922..90a635a1eb 100644 --- a/main-extensions/mogo-module-main-launcher/src/main/java/com/zhidao/mogo/module/main/launcher/MainLauncherActivity.java +++ b/main-extensions/mogo-module-main-launcher/src/main/java/com/zhidao/mogo/module/main/launcher/MainLauncherActivity.java @@ -4,6 +4,7 @@ import android.content.Intent; import android.os.Bundle; import android.os.Process; import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.widget.FrameLayout; @@ -13,21 +14,27 @@ import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.debug.DebugConfig; import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.module.common.MogoApisHandler; +import com.mogo.module.common.entity.V2XMessageEntity; import com.mogo.module.main.MainActivity; import com.mogo.module.main.cards.MogoModulesManager; import com.mogo.och.IMogoOCH; import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.StatusDescriptor; -import com.mogo.service.v2x.IWarningChangeListener; +import com.mogo.service.v2x.IV2XListener; import com.mogo.utils.logger.Logger; +import static com.mogo.module.common.entity.V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_BOTTOM; +import static com.mogo.module.common.entity.V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_LEFT; +import static com.mogo.module.common.entity.V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_RIGHT; +import static com.mogo.module.common.entity.V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_TOP; + /** * 针对作为Launcher的情况,做个性化操作 * * @author tongchenfei */ -public class MainLauncherActivity extends MainActivity implements IMogoIntentListener, IMogoStatusChangedListener, IWarningChangeListener { +public class MainLauncherActivity extends MainActivity implements IMogoIntentListener, IMogoStatusChangedListener, IV2XListener { private static final String TAG = "MainLauncherActivity"; protected boolean mIsHomeKeyDown = false; @@ -35,8 +42,10 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); DebugConfig.setNeedRequestUserInfo(true); + Log.d(TAG, "onCreateregisterIntentListener"); mServiceApis.getStatusManagerApi().registerStatusChangedListener(TAG, StatusDescriptor.VR_MODE, this); + mServiceApis.getV2XListenerManager().registerIntentListener(TAG,this); } @Override @@ -121,6 +130,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis super.onDestroy(); mServiceApis.getStatusManagerApi().unregisterStatusChangedListener(TAG, StatusDescriptor.VR_MODE, this); + mServiceApis.getV2XListenerManager().unregisterIntentListener(TAG,this); try { // acc off 之后会出现进程还在,但是页面被杀的情况,这个直接杀掉进程,然后让整个进程重启 Process.killProcess(Process.myPid()); @@ -159,16 +169,29 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis } @Override - public void warningChangedWithType(String type) { + public void warningChangedWithType(int type) { + Log.d(TAG, "显示红色预警蒙层"); switch (type) { - case "top": + case ALERT_THE_FRONT_CRASH_WARNING_TOP: mWarningTop.setVisibility(View.VISIBLE); - case "left": + mWarningLeft.setVisibility(View.GONE); + mWarningRight.setVisibility(View.GONE); + mWarningBottom.setVisibility(View.GONE); + case ALERT_THE_FRONT_CRASH_WARNING_LEFT: mWarningLeft.setVisibility(View.VISIBLE); - case "right": + mWarningTop.setVisibility(View.GONE); + mWarningRight.setVisibility(View.GONE); + mWarningBottom.setVisibility(View.GONE); + case ALERT_THE_FRONT_CRASH_WARNING_RIGHT: mWarningRight.setVisibility(View.VISIBLE); - case "bottom": + mWarningTop.setVisibility(View.GONE); + mWarningLeft.setVisibility(View.GONE); + mWarningBottom.setVisibility(View.GONE); + case ALERT_THE_FRONT_CRASH_WARNING_BOTTOM: mWarningBottom.setVisibility(View.VISIBLE); + mWarningRight.setVisibility(View.GONE); + mWarningTop.setVisibility(View.GONE); + mWarningLeft.setVisibility(View.GONE); } } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XMessageEntity.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XMessageEntity.java index 1fe1fe1fc9..336e7d5a27 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XMessageEntity.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XMessageEntity.java @@ -145,8 +145,14 @@ public class V2XMessageEntity implements Serializable { int ALERT_RECOMMEND_ROUTE = 1_011; // 基于预判目的地违章高发停车场推荐 int ALERT_RECOMMEND_PARKING = 1_012; - // 前车碰撞预警 - int ALERT_THE_FRONT_CRASH_WARNING = 1_0013; + // 前方碰撞预警 + int ALERT_THE_FRONT_CRASH_WARNING_TOP = 1_0013; + // 左前方碰撞预警 + int ALERT_THE_FRONT_CRASH_WARNING_LEFT = 1_0014; + // 右前方碰撞预警 + int ALERT_THE_FRONT_CRASH_WARNING_RIGHT = 1_0015; + // 后方碰撞预警 + int ALERT_THE_FRONT_CRASH_WARNING_BOTTOM = 1_0016; // 推送VR消息展示 int ALERT_PUSH_VR_SHOW = 2_000; // 自车求助 diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java index 51242be2f1..d80612b0dc 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java @@ -30,6 +30,7 @@ import com.mogo.service.fragmentmanager.FragmentStackTransactionListener; import com.mogo.service.fragmentmanager.IMogoFragmentManager; import com.mogo.service.module.IMogoModuleProvider; import com.mogo.service.statusmanager.IMogoStatusManager; +import com.mogo.service.v2x.IV2XListener; import com.mogo.skin.support.SkinMode; import com.mogo.utils.NetworkUtils; import com.mogo.utils.logger.Logger; diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java index 367840cca3..abbc83a430 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java @@ -26,6 +26,7 @@ import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoActionManager; import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.statusmanager.IMogoStatusManager; +import com.mogo.service.v2x.IV2XProvider; import com.mogo.utils.logger.Logger; import com.zhidao.carchattingprovider.CallChattingProviderConstant; import com.zhidao.carchattingprovider.ICarsChattingProvider; @@ -59,6 +60,8 @@ public class MarkerServiceHandler { private static IMogoLauncher sLauncher; private static IMogoFragmentManager sFragmentManager; private static ICarsChattingProvider sCarChatting; + private static IV2XProvider sIV2XProvider; + // private static IMogoGpsSimulatorManager sGpsSimulatorManager; public static synchronized void init( final Context context ) { @@ -86,6 +89,7 @@ public class MarkerServiceHandler { sFragmentManager = sApis.getFragmentManagerApi(); sCarChatting = ( ICarsChattingProvider ) ARouter.getInstance().build( CallChattingProviderConstant.CAR_CALL_PROVIDER ).navigation( context ); + sIV2XProvider = sApis.getV2XListenerManager(); MapMarkerManager.getInstance().init( context ); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java index f46bc7a74b..285d808e28 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java @@ -1,7 +1,6 @@ package com.mogo.module.v2x.scenario.impl; import android.content.Intent; -import android.util.Log; import androidx.localbroadcastmanager.content.LocalBroadcastManager; @@ -21,6 +20,7 @@ import com.mogo.module.v2x.scenario.scene.pushVR.V2XPushVREventScenario; import com.mogo.module.v2x.scenario.scene.road.V2XRoadEventScenario; import com.mogo.module.v2x.scenario.scene.seek.V2XSeekHelpScenario; import com.mogo.module.v2x.scenario.scene.ugc.V2XEventUgcScenario; +import com.mogo.module.v2x.scenario.scene.warning.V2XFrontWarningScenario; import com.mogo.module.v2x.utils.V2XUtils; import com.mogo.utils.TipToast; import com.mogo.utils.logger.Logger; @@ -75,8 +75,8 @@ public class V2XScenarioManager implements IV2XScenarioManager { case V2XMessageEntity.V2XTypeEnum.ALERT_SEEK_WARNING: mV2XScenario = new V2XSeekHelpScenario(); break; - case V2XMessageEntity.V2XTypeEnum.ALERT_FATIGUE_DRIVING : - case ALERT_RECOMMEND_PARKING : + case V2XMessageEntity.V2XTypeEnum.ALERT_FATIGUE_DRIVING: + case ALERT_RECOMMEND_PARKING: mV2XScenario = new V2XFatigueDrivingScenario(); break; case V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_WINDOW_WARNING: @@ -106,6 +106,12 @@ public class V2XScenarioManager implements IV2XScenarioManager { case V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_VR_SHOW: mV2XScenario = new V2XPushVREventScenario(); break; + case V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_TOP: + case V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_LEFT: + case V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_RIGHT: + case V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_BOTTOM: + mV2XScenario = new V2XFrontWarningScenario(); + break; default: mV2XScenario = null; Logger.e(MODULE_NAME, "当前V2X消息类型未定义。"); 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 04d37ba382..919831af2b 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 @@ -214,8 +214,15 @@ public class V2XTestConsoleWindow extends ConstraintLayout { v2XMessageEntity.getContent().getNoveltyInfo()); }); - mBtnTriggerWarningEvent.setOnClickListener(v->{ + //车路云—场景预警-V1.0 碰撞预警 + mBtnTriggerWarningEvent.setOnClickListener(v->{ + V2XMessageEntity v2XMessageEntity = + TestOnLineCarUtils.getV2XScenarioPushFrontWarningEventData(); + + Intent intent = new Intent(V2XConst.BROADCAST_SCENE_HANDLER_ACTION); + intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, v2XMessageEntity); + LocalBroadcastManager.getInstance(getContext()).sendBroadcast(intent); }); mBtnTriggerPushEvent.setOnClickListener(v -> { diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XFrontWarningScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XFrontWarningScenario.java new file mode 100644 index 0000000000..d0b3586f1a --- /dev/null +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XFrontWarningScenario.java @@ -0,0 +1,72 @@ +package com.mogo.module.v2x.scenario.scene.warning; + +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.module.common.entity.V2XMessageEntity; +import com.mogo.module.service.MarkerServiceHandler; +import com.mogo.module.service.MogoServices; +import com.mogo.module.v2x.scenario.impl.AbsV2XScenario; +import com.mogo.service.MogoServicePaths; +import com.mogo.service.impl.MogoServiceApis; +import com.mogo.service.impl.v2x.V2XManager; +import com.mogo.service.v2x.IV2XListener; +import com.mogo.service.v2x.IV2XProvider; + +/** + * @author liujing + * @description 车路云—场景预警-V1.0 前车/行人/摩托车/盲区碰撞预警 + * @since: 2021/3/24 + */ +public class V2XFrontWarningScenario extends AbsV2XScenario { + private int type; + private IV2XListener mIV2XListener; + + @Override + public void init(@Nullable V2XMessageEntity v2XMessageEntity) { + type = v2XMessageEntity.getType(); + MarkerServiceHandler.getApis().getV2XListenerManager().warningChangedWithType(type, TAG); + show(); + } + + @Override + public void show() { + Log.d(TAG, "show"); + } + + @Override + public void showWindow() { + + } + + @Override + public void closeWindow() { + + } + + @Override + public void showButton() { + + } + + @Override + public void closeButton() { + + } + + @Override + public void drawPOI() { + + } + + @Override + public void clearPOI() { + + } + +} 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 8246b1985e..bd0e95de1e 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 @@ -156,7 +156,7 @@ public class TestOnLineCarUtils { return null; } - public static V2XMessageEntity getV2XScenarioPushWarningEventData() { + public static V2XMessageEntity getV2XScenarioPushFrontWarningEventData() { try { InputStream inputStream = V2XUtils.getApp() .getResources() @@ -174,7 +174,7 @@ public class TestOnLineCarUtils { V2XMessageEntity v2xMessageEntity = new V2XMessageEntity<>(); // 控制类型 - v2xMessageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING); + v2xMessageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_TOP); // 设置数据 v2xMessageEntity.setContent(v2xRoadEventEntity); // 控制展示状态 diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java index 8033bc6f97..07eaec56f8 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java @@ -38,6 +38,7 @@ import com.mogo.service.strategy.IMogoOnlineCarListPanelProvider; import com.mogo.service.strategy.IMogoRefreshStrategyController; import com.mogo.service.share.IMogoTanluProvider; import com.mogo.service.share.IMogoTanluUiProvider; +import com.mogo.service.v2x.IV2XProvider; import com.mogo.service.windowview.IMogoTopViewManager; import com.mogo.service.windowview.IMogoWindowManager; import com.mogo.skin.support.IMogoSkinSupportInstaller; @@ -71,12 +72,12 @@ public interface IMogoServiceApis extends IProvider { * * @return */ - IMogoSocketManager getSocketManagerApi( Context context ); + IMogoSocketManager getSocketManagerApi(Context context); /** * 获取WebSocket操作api */ - IMogoWebSocketManager getWebSocketManagerApi( Context context ); + IMogoWebSocketManager getWebSocketManagerApi(Context context); /** * 大而全的数据管理接口 @@ -297,6 +298,7 @@ public interface IMogoServiceApis extends IProvider { /** * 获取交通状况服务 + * * @return */ IMogoTrafficUploadProvider getTrafficUploadApi(); @@ -314,4 +316,9 @@ public interface IMogoServiceApis extends IProvider { * @return */ IMogoSmallMapProvider getSmallMapProviderApi(); + + /* + *V2X + * */ + IV2XProvider getV2XListenerManager(); } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java index b7f8ac92f7..9bf3af095d 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java @@ -270,7 +270,7 @@ public class MogoServicePaths { public static final String PATH_TANLU_UI_API = "/tanlu/ui"; /** - * 碰撞报警模块 + * 碰撞报警模块 已碰撞 */ @Deprecated public static final String PATH_CRASH_WARNING = "/crash/warning"; @@ -304,4 +304,9 @@ public class MogoServicePaths { * 小地图控件 */ public static final String PATH_SMALL_MAP = "/small_map/api"; + + /* + *前方碰撞预警 未碰撞 + * */ + public static final String PATH_V2X_FRONT_CRASH_WARNING = "/front/crashwarning"; } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/v2x/IWarningChangeListener.java b/services/mogo-service-api/src/main/java/com/mogo/service/v2x/IV2XListener.java similarity index 54% rename from services/mogo-service-api/src/main/java/com/mogo/service/v2x/IWarningChangeListener.java rename to services/mogo-service-api/src/main/java/com/mogo/service/v2x/IV2XListener.java index bbe82f5827..4931132089 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/v2x/IWarningChangeListener.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/v2x/IV2XListener.java @@ -5,6 +5,6 @@ package com.mogo.service.v2x; * @description 描述 * @since: 2021/3/24 */ -public interface IWarningChangeListener { - void warningChangedWithType(String type); +public interface IV2XListener { + void warningChangedWithType(int type); } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/v2x/IV2XProvider.java b/services/mogo-service-api/src/main/java/com/mogo/service/v2x/IV2XProvider.java new file mode 100644 index 0000000000..ded08a1eff --- /dev/null +++ b/services/mogo-service-api/src/main/java/com/mogo/service/v2x/IV2XProvider.java @@ -0,0 +1,24 @@ +package com.mogo.service.v2x; + +import android.content.Intent; + +import com.alibaba.android.arouter.facade.template.IProvider; + +/** + * @author liujing + * @description 描述 + * @since: 2021/3/24 + */ +public interface IV2XProvider extends IProvider { + /** + * 注册意图接收者 + */ + public void registerIntentListener(String intent, IV2XListener listener); + + /** + * 注册意图接收者 + */ + public void unregisterIntentListener(String intent, IV2XListener listener); + + public void warningChangedWithType(int type, String command); +} diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java index f4b22167b9..71b91d31df 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java @@ -1,6 +1,7 @@ package com.mogo.service.impl; import android.content.Context; +import android.util.Log; import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.android.arouter.facade.template.IProvider; @@ -46,6 +47,7 @@ import com.mogo.service.strategy.IMogoOnlineCarListPanelProvider; import com.mogo.service.strategy.IMogoRefreshStrategyController; import com.mogo.service.share.IMogoTanluProvider; import com.mogo.service.share.IMogoTanluUiProvider; +import com.mogo.service.v2x.IV2XProvider; import com.mogo.service.windowview.IMogoTopViewManager; import com.mogo.service.windowview.IMogoWindowManager; import com.mogo.skin.support.IMogoSkinSupportInstaller; @@ -59,7 +61,7 @@ import com.mogo.utils.logger.Logger; * 描述 */ -@Route( path = MogoServicePaths.PATH_SERVICE_APIS ) +@Route(path = MogoServicePaths.PATH_SERVICE_APIS) public class MogoServiceApis implements IMogoServiceApis { private static final String TAG = "MogoServiceApis"; @@ -72,18 +74,18 @@ public class MogoServiceApis implements IMogoServiceApis { } @Override - public IMogoSocketManager getSocketManagerApi( Context context ) { - return getApiInstance( IMogoSocketManager.class, MogoServicePaths.PATH_SOCKET_MANAGER ); + public IMogoSocketManager getSocketManagerApi(Context context) { + return getApiInstance(IMogoSocketManager.class, MogoServicePaths.PATH_SOCKET_MANAGER); } @Override public IMogoWebSocketManager getWebSocketManagerApi(Context context) { - return getApiInstance( IMogoWebSocketManager.class, MogoServicePaths.PATH_WEB_SOCKET_MANAGER ); + return getApiInstance(IMogoWebSocketManager.class, MogoServicePaths.PATH_WEB_SOCKET_MANAGER); } @Override public IMogoFragmentManager getFragmentManagerApi() { - return SingletonsHolder.get( IMogoFragmentManager.class ); + return SingletonsHolder.get(IMogoFragmentManager.class); } @Override @@ -98,163 +100,168 @@ public class MogoServiceApis implements IMogoServiceApis { @Override public IMogoMapService getMapServiceApi() { - return SingletonsHolder.get( IMogoMapService.class ); + return SingletonsHolder.get(IMogoMapService.class); } @Override public IMogoNetwork getNetworkApi() { - return SingletonsHolder.get( IMogoNetwork.class ); + return SingletonsHolder.get(IMogoNetwork.class); } @Override public IMogoMsgCenter getMsgCenterApi() { - return SingletonsHolder.get( IMogoMsgCenter.class ); + return SingletonsHolder.get(IMogoMsgCenter.class); } @Override public IMogoStatusManager getStatusManagerApi() { - return SingletonsHolder.get( IMogoStatusManager.class ); + return SingletonsHolder.get(IMogoStatusManager.class); } @Override - public void init( Context context ) { + public void init(Context context) { } @Override @Deprecated public synchronized IMogoCardManager getCardManagerApi() { - return getApiInstance( IMogoCardManager.class, MogoServicePaths.PATH_CARD_MANAGER ); + return getApiInstance(IMogoCardManager.class, MogoServicePaths.PATH_CARD_MANAGER); } @Override public IMogoDataManager getDataManagerApi() { - return getApiInstance( IMogoDataManager.class, MogoServicePaths.PATH_DATA_MANAGER ); + return getApiInstance(IMogoDataManager.class, MogoServicePaths.PATH_DATA_MANAGER); } @Override public IMogoRegisterCenter getRegisterCenterApi() { - return getApiInstance( IMogoRegisterCenter.class, MogoServicePaths.PATH_REGISTER_CENTER ); + return getApiInstance(IMogoRegisterCenter.class, MogoServicePaths.PATH_REGISTER_CENTER); } @Override public IMogoSearchManager getSearchManagerApi() { - return getApiInstance( IMogoSearchManager.class, MogoServicePaths.PATH_SEARCH_MANAGER ); + return getApiInstance(IMogoSearchManager.class, MogoServicePaths.PATH_SEARCH_MANAGER); } @Override public IMogoSettingManager getSettingManagerApi() { - return getApiInstance( IMogoSettingManager.class, MogoServicePaths.PATH_SETTING_MANAGER ); + return getApiInstance(IMogoSettingManager.class, MogoServicePaths.PATH_SETTING_MANAGER); } @Override public IMogoWindowManager getWindowManagerApi() { - return getApiInstance( IMogoWindowManager.class, MogoServicePaths.PATH_WINDOW_MANAGER ); + return getApiInstance(IMogoWindowManager.class, MogoServicePaths.PATH_WINDOW_MANAGER); } @Override public IMogoADASController getAdasControllerApi() { - return getApiInstance( IMogoADASController.class, MogoServicePaths.PATH_ADAS_CONTROLLER ); + return getApiInstance(IMogoADASController.class, MogoServicePaths.PATH_ADAS_CONTROLLER); } @Override public IMogoActionManager getActionManagerApi() { - return getApiInstance( IMogoActionManager.class, MogoServicePaths.PATH_ACTION_APIS ); + return getApiInstance(IMogoActionManager.class, MogoServicePaths.PATH_ACTION_APIS); } @Override public IMogoRefreshStrategyController getRefreshStrategyControllerApi() { - return getApiInstance( IMogoRefreshStrategyController.class, MogoServicePaths.PATH_REFRESH_STRATEGY_API ); + return getApiInstance(IMogoRefreshStrategyController.class, MogoServicePaths.PATH_REFRESH_STRATEGY_API); } @Override public IMogoAddressManager getAddressManagerApi() { - return getApiInstance( IMogoAddressManager.class, MogoServicePaths.PATH_ADDRESS_MANAGER ); + return getApiInstance(IMogoAddressManager.class, MogoServicePaths.PATH_ADDRESS_MANAGER); } @Override public IMogoLauncher getLauncherApi() { - return getApiInstance( IMogoLauncher.class, MogoServicePaths.PATH_LAUNCHER_API ); + return getApiInstance(IMogoLauncher.class, MogoServicePaths.PATH_LAUNCHER_API); } @Override public IMogoEntranceButtonController getEntranceButtonController() { - return getApiInstance( IMogoEntranceButtonController.class, MogoServicePaths.PATH_ENTRANCE_BUTTON_API ); + return getApiInstance(IMogoEntranceButtonController.class, MogoServicePaths.PATH_ENTRANCE_BUTTON_API); } @Override public IMogoTopViewManager getTopViewManager() { - return getApiInstance( IMogoTopViewManager.class, MogoServicePaths.PATH_EXTENSIONS_TOP_VIEW_MANAGER ); + return getApiInstance(IMogoTopViewManager.class, MogoServicePaths.PATH_EXTENSIONS_TOP_VIEW_MANAGER); } @Override public IMogoMarkerService getMarkerService() { - return getApiInstance( IMogoMarkerService.class, MogoServicePaths.PATH_MARKER_SERVICE ); + return getApiInstance(IMogoMarkerService.class, MogoServicePaths.PATH_MARKER_SERVICE); } @Override public IMogoShareManager getShareManager() { - return getApiInstance( IMogoShareManager.class, MogoServicePaths.PATH_SHARE ); + return getApiInstance(IMogoShareManager.class, MogoServicePaths.PATH_SHARE); } @Override public IEventPanelProvider getEventPanelManager() { - return getApiInstance( IEventPanelProvider.class, MogoServicePaths.PATH_EVENT_PANEL ); + return getApiInstance(IEventPanelProvider.class, MogoServicePaths.PATH_EVENT_PANEL); } @Override public IMogoLocationInfoService getLocationInfoApi() { - return getApiInstance( IMogoLocationInfoService.class, MogoServicePaths.PATH_LOCATION_INFO ); + return getApiInstance(IMogoLocationInfoService.class, MogoServicePaths.PATH_LOCATION_INFO); } @Override public IMogoPassportManager getPassportManagerApi() { - return getApiInstance( IMogoPassportManager.class, MogoServicePaths.PATH_PASSPORT ); + return getApiInstance(IMogoPassportManager.class, MogoServicePaths.PATH_PASSPORT); } @Override public IMogoAuthManager getAuthManagerApi() { - return getApiInstance( IMogoAuthManager.class, MogoServicePaths.PATH_AGREEMENT ); + return getApiInstance(IMogoAuthManager.class, MogoServicePaths.PATH_AGREEMENT); } @Override public IMogoTanluProvider getTanluApi() { - return getApiInstance( IMogoTanluProvider.class, MogoServicePaths.PATH_TANLU_API ); + return getApiInstance(IMogoTanluProvider.class, MogoServicePaths.PATH_TANLU_API); } @Override public IMogoMonitorProvider getMogoMonitorApi() { - return getApiInstance( IMogoMonitorProvider.class, MogoServicePaths.PATH_MOGO_MONITOR ); + return getApiInstance(IMogoMonitorProvider.class, MogoServicePaths.PATH_MOGO_MONITOR); } @Override public IMogoTanluUiProvider getTanluUiApi() { - return getApiInstance( IMogoTanluUiProvider.class, MogoServicePaths.PATH_TANLU_UI_API ); + return getApiInstance(IMogoTanluUiProvider.class, MogoServicePaths.PATH_TANLU_UI_API); } @Override public IMogoSkinSupportInstaller getSkinSupportInstallerApi() { - return getApiInstance( IMogoSkinSupportInstaller.class, SkinSupportInstallerConstants.PATH ); + return getApiInstance(IMogoSkinSupportInstaller.class, SkinSupportInstallerConstants.PATH); } @Override public IMogoCrashWarnProvider getCrashWarnProvider() { - return getApiInstance( IMogoCrashWarnProvider.class, MogoServicePaths.PATH_CRASH_WARNING ); + return getApiInstance(IMogoCrashWarnProvider.class, MogoServicePaths.PATH_CRASH_WARNING); } @Override public IMogoOnlineCarListPanelProvider getOnlineCarPanelApi() { - return getApiInstance( IMogoOnlineCarListPanelProvider.class, MogoServicePaths.PATH_ONLINE_CAR_PANEL ); + return getApiInstance(IMogoOnlineCarListPanelProvider.class, MogoServicePaths.PATH_ONLINE_CAR_PANEL); } @Override public IMogoMapFrameController getMapFrameControllerApi() { - return getApiInstance( IMogoMapFrameController.class, MogoServicePaths.PATH_MAP_FRAME_CONTROLLER ); + return getApiInstance(IMogoMapFrameController.class, MogoServicePaths.PATH_MAP_FRAME_CONTROLLER); } @Override public IMogoSmallMapProvider getSmallMapProviderApi() { - return getApiInstance( IMogoSmallMapProvider.class, MogoServicePaths.PATH_SMALL_MAP ); + return getApiInstance(IMogoSmallMapProvider.class, MogoServicePaths.PATH_SMALL_MAP); + } + + @Override + public IV2XProvider getV2XListenerManager() { + return getApiInstance(IV2XProvider.class, MogoServicePaths.PATH_V2X_FRONT_CRASH_WARNING); } @Override @@ -262,19 +269,19 @@ public class MogoServiceApis implements IMogoServiceApis { return getApiInstance(IMogoTrafficUploadProvider.class, MogoServicePaths.PATH_TRAFFIC_UPLOAD); } - private static < T extends IProvider > T getApiInstance( Class< T > clazz, String path ) { - T inst = SingletonsHolder.get( clazz ); - if ( inst == null ) { - synchronized ( sLock ) { - inst = SingletonsHolder.get( clazz ); - if ( inst != null ) { + private static T getApiInstance(Class clazz, String path) { + T inst = SingletonsHolder.get(clazz); + if (inst == null) { + synchronized (sLock) { + inst = SingletonsHolder.get(clazz); + if (inst != null) { return inst; } - T newInst = ( T ) ARouter.getInstance().build( path ).navigation(); + T newInst = (T) ARouter.getInstance().build(path).navigation(); try { - SingletonsHolder.registerApi( clazz, newInst ); - Logger.d( TAG, "keep IProvider instance to SingletonHolder: path = %s", path ); - } catch ( Exception e ) { + SingletonsHolder.registerApi(clazz, newInst); + Logger.d(TAG, "keep IProvider instance to SingletonHolder: path = %s", path); + } catch (Exception e) { } return newInst; } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java b/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java index eb14cc7f9b..c9a49021c7 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java @@ -9,11 +9,13 @@ import com.mogo.service.impl.map.MogoMapService; import com.mogo.service.impl.network.MogoNetWorkService; import com.mogo.service.impl.statusmanager.MogoMsgCenter; import com.mogo.service.impl.statusmanager.MogoStatusManager; +import com.mogo.service.impl.v2x.V2XManager; import com.mogo.service.map.IMogoMapService; import com.mogo.service.network.IMogoNetwork; import com.mogo.service.statusmanager.IMogoMsgCenter; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.strategy.IMogoRefreshStrategyController; +import com.mogo.service.v2x.IV2XProvider; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -28,26 +30,27 @@ public class SingletonsHolder { private static final String TAG = "SingletonsHolder"; - private static final Map< Class, Object > sSingletons = new ConcurrentHashMap<>(); + private static final Map sSingletons = new ConcurrentHashMap<>(); static { - sSingletons.put( IMogoFragmentManager.class, new MogoFragmentManager() ); - sSingletons.put( IMogoMapService.class, new MogoMapService() ); - sSingletons.put( IMogoNetwork.class, new MogoNetWorkService() ); - sSingletons.put( IMogoMsgCenter.class, new MogoMsgCenter() ); - sSingletons.put( IMogoStatusManager.class, new MogoStatusManager() ); - sSingletons.put( IMogoDataManager.class, ARouter.getInstance().navigation( IMogoDataManager.class ) ); - sSingletons.put( IMogoRefreshStrategyController.class, ARouter.getInstance().navigation( IMogoRefreshStrategyController.class ) ); + sSingletons.put(IMogoFragmentManager.class, new MogoFragmentManager()); + sSingletons.put(IMogoMapService.class, new MogoMapService()); + sSingletons.put(IMogoNetwork.class, new MogoNetWorkService()); + sSingletons.put(IMogoMsgCenter.class, new MogoMsgCenter()); + sSingletons.put(IMogoStatusManager.class, new MogoStatusManager()); + sSingletons.put(IMogoDataManager.class, ARouter.getInstance().navigation(IMogoDataManager.class)); + sSingletons.put(IMogoRefreshStrategyController.class, ARouter.getInstance().navigation(IMogoRefreshStrategyController.class)); + sSingletons.put(IV2XProvider.class, new V2XManager()); } - public static < T > T get( Class< T > clazz ) { - return ( T ) sSingletons.get( clazz ); + public static T get(Class clazz) { + return (T) sSingletons.get(clazz); } - public static < T extends IProvider > void registerApi( Class< ? extends IProvider > api, T impl ) throws Exception { - if ( api == null || impl == null ) { + public static void registerApi(Class api, T impl) throws Exception { + if (api == null || impl == null) { return; } - sSingletons.put( api, impl ); + sSingletons.put(api, impl); } } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/v2x/V2XManager.java b/services/mogo-service/src/main/java/com/mogo/service/impl/v2x/V2XManager.java new file mode 100644 index 0000000000..43929f64ed --- /dev/null +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/v2x/V2XManager.java @@ -0,0 +1,66 @@ +package com.mogo.service.impl.v2x; + +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.service.MogoServicePaths; +import com.mogo.service.intent.IMogoIntentListener; +import com.mogo.service.v2x.IV2XListener; +import com.mogo.service.v2x.IV2XProvider; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; + +/** + * @author liujing + * @description 描述 + * @since: 2021/3/24 + */ +@Route(path = MogoServicePaths.PATH_V2X_FRONT_CRASH_WARNING) +public class V2XManager implements IV2XProvider { + private Map> mListeners = new ConcurrentHashMap<>(); + + @Override + public void registerIntentListener(String intent, IV2XListener listener) { + if (listener == null || intent == null) { + Log.d("V2XManager", "listener/intent 为null"); + return; + } + Log.d("V2XManager", "intent=="+intent+"/listener=="+listener); + if (!mListeners.containsKey(intent)) { + mListeners.put(intent, new CopyOnWriteArrayList<>()); + } + mListeners.get(intent).add(listener); + } + + @Override + public void unregisterIntentListener(String intent, IV2XListener listener) { + if (mListeners.containsKey(intent)) { + mListeners.get(intent).remove(listener); + } + } + + @Override + public void warningChangedWithType(int type, String command) { + List listeners = mListeners.get(command); + if (listeners != null && !listeners.isEmpty()) { + Iterator iterator = listeners.iterator(); + while (iterator.hasNext()) { + IV2XListener listener = iterator.next(); + if (listener != null) { + listener.warningChangedWithType(type); + } + } + } + } + + @Override + public void init(Context context) { + + } +}