Merge branch 'war' into dev2_aiSdk

This commit is contained in:
liujing
2021-03-25 14:26:47 +08:00
27 changed files with 508 additions and 104 deletions

1
.idea/gradle.xml generated
View File

@@ -91,7 +91,6 @@
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
<option name="useQualifiedModuleNames" value="true" />
</GradleProjectSettings>
</option>
</component>

View File

@@ -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" ) );

View File

@@ -43,9 +43,11 @@ dependencies {
if (Boolean.valueOf(RELEASE)) {
api rootProject.ext.dependencies.modulemain
implementation rootProject.ext.dependencies.mogooch
implementation rootProject.ext.dependencies.moduleservice
} else {
api project(":modules:mogo-module-main")
implementation project(":OCH:mogo-och")
implementation project(':modules:mogo-module-service')
}
}

View File

@@ -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,26 +14,37 @@ 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.module.service.receiver.MogoReceiver;
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.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 {
public class MainLauncherActivity extends MainActivity implements IMogoIntentListener, IMogoStatusChangedListener, IV2XListener {
private static final String TAG = "MainLauncherActivity";
protected boolean mIsHomeKeyDown = false;
@Override
protected void onCreate( @Nullable Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
DebugConfig.setNeedRequestUserInfo( true );
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DebugConfig.setNeedRequestUserInfo(true);
Log.d(TAG, "onCreate");
mServiceApis.getV2XListenerManager().registerIntentListener(MogoReceiver.ACTION_V2X_FRONT_WARNING,this);
mServiceApis.getStatusManagerApi().registerStatusChangedListener(TAG,
StatusDescriptor.VR_MODE, this);
}
@@ -43,10 +55,10 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis
// 显示左边遮罩
if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) {
mLeftShadowFrame.setVisibility(View.GONE);
}else {
} else {
mLeftShadowFrame.setVisibility(View.VISIBLE);
}
MogoModulesManager.getInstance().loadAppsListModule( com.mogo.module.main.R.id.module_main_id_apps_fragment_container );
MogoModulesManager.getInstance().loadAppsListModule(com.mogo.module.main.R.id.module_main_id_apps_fragment_container);
}
@Override
@@ -57,21 +69,21 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis
@Override
protected void hideLayout() {
super.hideLayout();
mApps.setVisibility( View.GONE );
mLeftShadowFrame.setVisibility( View.GONE );
mApps.setVisibility(View.GONE);
mLeftShadowFrame.setVisibility(View.GONE);
}
@Override
protected void showLayout() {
super.showLayout();
mApps.setVisibility( View.VISIBLE );
mLeftShadowFrame.setVisibility( View.VISIBLE );
mApps.setVisibility(View.VISIBLE);
mLeftShadowFrame.setVisibility(View.VISIBLE);
}
@Override
protected void onStart() {
super.onStart();
getApis().getIntentManagerApi().registerIntentListener( Intent.ACTION_CLOSE_SYSTEM_DIALOGS, this );
getApis().getIntentManagerApi().registerIntentListener(Intent.ACTION_CLOSE_SYSTEM_DIALOGS, this);
}
@Override
@@ -83,13 +95,13 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis
@Override
protected void onStop() {
super.onStop();
getApis().getIntentManagerApi().unregisterIntentListener( Intent.ACTION_CLOSE_SYSTEM_DIALOGS, this );
getApis().getIntentManagerApi().unregisterIntentListener(Intent.ACTION_CLOSE_SYSTEM_DIALOGS, this);
}
@Override
public void onIntentReceived( String intentStr, Intent intent ) {
if ( TextUtils.equals( Intent.ACTION_CLOSE_SYSTEM_DIALOGS, intentStr ) ) {
mIsHomeKeyDown = intent.getBooleanExtra( "isHomeKeyDown", true );
public void onIntentReceived(String intentStr, Intent intent) {
if (TextUtils.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS, intentStr)) {
mIsHomeKeyDown = intent.getBooleanExtra("isHomeKeyDown", true);
}
}
@@ -107,10 +119,10 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis
/**
* 加载网约车模块
*/
private void loadOCHModule(){
IMogoOCH och = ARouter.getInstance().navigation( IMogoOCH.class );
if ( och != null ) {
och.init( this, R.id.module_main_id_och_fragment );
private void loadOCHModule() {
IMogoOCH och = ARouter.getInstance().navigation(IMogoOCH.class);
if (och != null) {
och.init(this, R.id.module_main_id_och_fragment);
}
}
@@ -119,40 +131,75 @@ 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() );
} catch ( Exception e ) {
Process.killProcess(Process.myPid());
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onMapUiModeChanged( EnumMapUI mapUI ) {
super.onMapUiModeChanged( mapUI );
Intent intent = new Intent( "com.mogo.style.SKIN_CHANGED" );
intent.putExtra( "type", -1 );
if ( mapUI == EnumMapUI.Type_Light ) {
intent.putExtra( "type", 1 );
} else if( mapUI == EnumMapUI.Type_Night ){
intent.putExtra( "type", 0 );
public void onMapUiModeChanged(EnumMapUI mapUI) {
super.onMapUiModeChanged(mapUI);
Intent intent = new Intent("com.mogo.style.SKIN_CHANGED");
intent.putExtra("type", -1);
if (mapUI == EnumMapUI.Type_Light) {
intent.putExtra("type", 1);
} else if (mapUI == EnumMapUI.Type_Night) {
intent.putExtra("type", 0);
}
sendBroadcast( intent );
Logger.d( TAG, "send msg to AI Voice" );
sendBroadcast(intent);
Logger.d(TAG, "send msg to AI Voice");
}
@Override
public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) {
FrameLayout.LayoutParams entranceParams = ( ( FrameLayout.LayoutParams ) mEntrance.getLayoutParams() );
FrameLayout.LayoutParams entranceParams = ((FrameLayout.LayoutParams) mEntrance.getLayoutParams());
if (isTrue) {
entranceParams.leftMargin = getResources().getDimensionPixelSize( R.dimen.module_main_entrance_fragment_container_marginLeft_in_vr_mode );
entranceParams.leftMargin = getResources().getDimensionPixelSize(R.dimen.module_main_entrance_fragment_container_marginLeft_in_vr_mode);
mLeftShadowFrame.setVisibility(View.GONE);
mApps.setVisibility(View.GONE);
}else{
entranceParams.leftMargin = getResources().getDimensionPixelSize( R.dimen.module_main_id_entrance_fragment_container_marginLeft );
} else {
entranceParams.leftMargin = getResources().getDimensionPixelSize(R.dimen.module_main_id_entrance_fragment_container_marginLeft);
mLeftShadowFrame.setVisibility(View.VISIBLE);
mApps.setVisibility(View.VISIBLE);
}
mEntrance.setLayoutParams( entranceParams );
mEntrance.setLayoutParams(entranceParams);
}
@Override
public void warningChangedWithType(int type) {
Log.d(TAG, "显示红色预警蒙层");
switch (type) {
case ALERT_THE_FRONT_CRASH_WARNING_TOP:
mWarningTop.setVisibility(View.VISIBLE);
mWarningLeft.setVisibility(View.GONE);
mWarningRight.setVisibility(View.GONE);
mWarningBottom.setVisibility(View.GONE);
break;
case ALERT_THE_FRONT_CRASH_WARNING_LEFT:
mWarningLeft.setVisibility(View.VISIBLE);
mWarningTop.setVisibility(View.GONE);
mWarningRight.setVisibility(View.GONE);
mWarningBottom.setVisibility(View.GONE);
break;
case ALERT_THE_FRONT_CRASH_WARNING_RIGHT:
mWarningRight.setVisibility(View.VISIBLE);
mWarningTop.setVisibility(View.GONE);
mWarningLeft.setVisibility(View.GONE);
mWarningBottom.setVisibility(View.GONE);
break;
case ALERT_THE_FRONT_CRASH_WARNING_BOTTOM:
mWarningBottom.setVisibility(View.VISIBLE);
mWarningRight.setVisibility(View.GONE);
mWarningTop.setVisibility(View.GONE);
mWarningLeft.setVisibility(View.GONE);
break;
default:
break;
}
}
}

View File

@@ -145,6 +145,14 @@ public class V2XMessageEntity<T> implements Serializable {
int ALERT_RECOMMEND_ROUTE = 1_011;
// 基于预判目的地违章高发停车场推荐
int ALERT_RECOMMEND_PARKING = 1_012;
// 前方碰撞预警
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;
// 自车求助

View File

@@ -5,6 +5,7 @@ import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -29,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;
@@ -64,6 +66,11 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
protected FrameLayout mLeftPanelLayout;
protected View mLeftShadowFrame;
protected ImageView mWarningTop;
protected ImageView mWarningLeft;
protected ImageView mWarningRight;
protected ImageView mWarningBottom;
@Override
protected int getLayoutId() {
if ( !DebugConfig.isMapBased() ) {
@@ -103,6 +110,11 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
mLeftPanelLayout = findViewById( R.id.module_main_id_left_panel_fragment_container );
mHistoryMessagePanel = findViewById( R.id.module_main_id_message_history_fragment_container );
mWarningTop = findViewById(R.id.warning_top);
mWarningLeft = findViewById(R.id.warning_left);
mWarningRight = findViewById(R.id.warning_right);
mWarningBottom = findViewById(R.id.warning_bottom);
// 避免事件穿透导致地图被滑动
mLeftShadowFrame.setOnClickListener( view -> {
} );

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="90"
android:endColor="#00F03232"
android:startColor="#A5F03232"
android:type="linear"></gradient>
</shape>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="0"
android:endColor="#00F03232"
android:startColor="#A5F03232"
android:type="linear"></gradient>
</shape>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="180"
android:endColor="#00F03232"
android:startColor="#A5F03232"
android:type="linear"></gradient>
</shape>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="270"
android:endColor="#00FF0606"
android:startColor="#8CFF0606"
android:type="linear"></gradient>
</shape>

View File

@@ -2,8 +2,8 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:background="@color/module_main_window_background_color"
android:layout_height="match_parent"
android:background="@color/module_main_window_background_color"
android:orientation="vertical">
<!-- 地图-->
@@ -12,6 +12,36 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/warning_top"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_390"
android:background="@drawable/module_main_warning_bkg_top"
android:visibility="gone" />
<ImageView
android:id="@+id/warning_left"
android:layout_width="@dimen/dp_390"
android:layout_height="match_parent"
android:background="@drawable/module_main_warning_bkg_left"
android:visibility="gone" />
<ImageView
android:id="@+id/warning_right"
android:layout_width="@dimen/dp_390"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/module_main_id_warning_view_marginLeft"
android:background="@drawable/module_main_warning_bkg_right"
android:visibility="gone" />
<ImageView
android:id="@+id/warning_bottom"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_390"
android:layout_marginTop="@dimen/dp_690"
android:background="@drawable/module_main_warning_bkg_bottom"
android:visibility="gone" />
<FrameLayout
android:id="@+id/module_main_id_map_left_shadow_frame"
android:layout_width="@dimen/module_main_map_left_shadow_frame_width"

View File

@@ -32,4 +32,6 @@
<dimen name="module_main_event_panel_fragment_paddingBottom">18px</dimen>
<dimen name="module_main_event_panel_fragment_paddingLeft">18px</dimen>
<dimen name="module_main_event_panel_fragment_paddingRight">18px</dimen>
<dimen name="module_main_id_warning_view_marginLeft">1530px</dimen>
</resources>

View File

@@ -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 );

View File

@@ -63,6 +63,9 @@ public class MogoReceiver extends BroadcastReceiver {
// 同行者 查询xxx堵不堵发送的广播
public static final String ACTION_TXZ_BLOCK_SEARCH = "com.zhidao.roadcondition.roadinfo";
//车路云—场景预警
public static final String ACTION_V2X_FRONT_WARNING = "ACTION_V2X_FRONT_WARNING";
private IMogoIntentManager mMogoIntentManager;
public MogoReceiver(Context context) {

View File

@@ -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消息类型未定义。");

View File

@@ -51,6 +51,7 @@ public class V2XTestConsoleWindow extends ConstraintLayout {
private Button mBtnTriggerRoadEvent;
private Button mBtnClearRoadEvent;
private Button mBtnTriggerPushEvent;
private Button mBtnTriggerWarningEvent;
private Button mBtnTriggerPushLiveCarEvent;
private Button mBtnTriggerAnimationEvent;
private Button mBtnbtnFrontCarLiveEvent;
@@ -112,6 +113,7 @@ public class V2XTestConsoleWindow extends ConstraintLayout {
mBtnTriggerOpen = findViewById(R.id.btnTriggerOpen);
mBtnClearRoadEvent = findViewById(R.id.btnClearRoadEvent);
mBtnTriggerRoadEvent = findViewById(R.id.btnTriggerRoadEvent);
mBtnTriggerWarningEvent = findViewById(R.id.btnTriggerWarningEvent);
mBtnTriggerPushEvent = findViewById(R.id.btnTriggerPushEvent);
mBtnTriggerPushLiveCarEvent = findViewById(R.id.btnTriggerPushLiveCarEvent);
mBtnTriggerAnimationEvent = findViewById(R.id.btnTriggerAnimationEvent);
@@ -213,6 +215,16 @@ public class V2XTestConsoleWindow extends ConstraintLayout {
});
//车路云—场景预警-V1.0 碰撞预警
mBtnTriggerWarningEvent.setOnClickListener(v->{
V2XMessageEntity<V2XPushMessageEntity> 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 -> {
V2XMessageEntity<V2XPushMessageEntity> v2XMessageEntity =
TestOnLineCarUtils.getV2XScenarioPushEventData();

View File

@@ -0,0 +1,74 @@
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.service.receiver.MogoReceiver;
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().warningChangedForListenerWithType(type, MogoReceiver.ACTION_V2X_FRONT_WARNING);
show();
}
@Override
public void show() {
showWindow();
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() {
}
}

View File

@@ -156,6 +156,35 @@ public class TestOnLineCarUtils {
return null;
}
public static V2XMessageEntity<V2XPushMessageEntity> getV2XScenarioPushFrontWarningEventData() {
try {
InputStream inputStream = V2XUtils.getApp()
.getResources()
.openRawResource(R.raw.scenario_warning_event_data);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len = -1;
byte[] buffer = new byte[1024];
while ((len = inputStream.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
inputStream.close();
// 加载数据源
V2XPushMessageEntity v2xRoadEventEntity = GsonUtil.objectFromJson(baos.toString(), V2XPushMessageEntity.class);
V2XMessageEntity<V2XPushMessageEntity> v2xMessageEntity = new V2XMessageEntity<>();
// 控制类型
v2xMessageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_THE_FRONT_CRASH_WARNING_TOP);
// 设置数据
v2xMessageEntity.setContent(v2xRoadEventEntity);
// 控制展示状态
v2xMessageEntity.setShowState(true);
return v2xMessageEntity;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 模拟H5推送直播数据

View File

@@ -239,6 +239,20 @@
android:textSize="@dimen/dp_22"
android:textStyle="bold" />
<Button
android:id="@+id/btnTriggerWarningEvent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_10"
android:background="#1EBD85"
android:padding="@dimen/dp_10"
android:text="前车碰撞预警"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_22"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/btnTriggerPushEvent"
android:layout_width="wrap_content"

View File

@@ -0,0 +1,12 @@
{
"systemTime":1615529739389,
"satelliteTime":1615529739389,
"lon":116.411360351446,
"lat":39.9760799115428,
"alt":34.4648361206054,
"heading":359.939618623258,
"speed":11.108121,
"type":3,
"uuid":"2_1",
"direction": "0"
}

View File

@@ -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();
}

View File

@@ -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";
}

View File

@@ -0,0 +1,10 @@
package com.mogo.service.v2x;
/**
* @author liujing
* @description 描述
* @since: 2021/3/24
*/
public interface IV2XListener {
void warningChangedWithType(int type);
}

View File

@@ -0,0 +1,18 @@
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 warningChangedForListenerWithType(int type, String command);
}

View File

@@ -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 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) {
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;
}

View File

@@ -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<Class, Object> 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> T get(Class<T> 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 <T extends IProvider> void registerApi(Class<? extends IProvider> api, T impl) throws Exception {
if (api == null || impl == null) {
return;
}
sSingletons.put( api, impl );
sSingletons.put(api, impl);
}
}

View File

@@ -0,0 +1,67 @@
package com.mogo.service.impl.v2x;
import android.content.Context;
import android.content.Intent;
import android.nfc.Tag;
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<String, CopyOnWriteArrayList<IV2XListener>> mListeners = new ConcurrentHashMap<>();
@Override
public void registerIntentListener(String intent, IV2XListener listener) {
if (listener == null || intent == null) {
Log.d("V2XManager","listener == null || intent == null");
return;
}
if (!mListeners.containsKey(intent)) {
Log.d("V2XManager","intent=="+intent+"listener"+listener);
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 warningChangedForListenerWithType(int type, String command) {
List<IV2XListener> listeners = mListeners.get(command);
if (listeners != null && !listeners.isEmpty()) {
Iterator<IV2XListener> iterator = listeners.iterator();
while (iterator.hasNext()) {
IV2XListener listener = iterator.next();
if (listener != null) {
listener.warningChangedWithType(type);
}
}
}
}
@Override
public void init(Context context) {
}
}