This commit is contained in:
wangcongtao
2020-12-08 14:08:53 +08:00
840 changed files with 31903 additions and 11168 deletions

View File

@@ -12,6 +12,7 @@ import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.auth.IMogoAuthManager;
import com.mogo.service.cardmanager.IMogoCardManager;
import com.mogo.service.connection.IMogoSocketManager;
import com.mogo.service.connection.IMogoWebSocketManager;
import com.mogo.service.datamanager.IMogoDataManager;
import com.mogo.service.entrance.IMogoEntranceButtonController;
import com.mogo.service.eventpanel.IEventPanelProvider;
@@ -24,6 +25,7 @@ import com.mogo.service.impl.singleton.SingletonsHolder;
import com.mogo.service.intent.IMogoIntentManager;
import com.mogo.service.launcher.IMogoLauncher;
import com.mogo.service.locationinfo.IMogoLocationInfoService;
import com.mogo.service.map.IMogoMapFrameController;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.module.IMogoActionManager;
import com.mogo.service.module.IMogoAddressManager;
@@ -33,7 +35,7 @@ import com.mogo.service.module.IMogoSearchManager;
import com.mogo.service.module.IMogoSettingManager;
import com.mogo.service.monitor.IMogoMonitorProvider;
import com.mogo.service.network.IMogoNetwork;
import com.mogo.service.obu.IMogoObuManager;
import com.mogo.service.obu.IMogoCrashWarnProvider;
import com.mogo.service.passport.IMogoPassportManager;
import com.mogo.service.share.IMogoShareManager;
import com.mogo.service.share.IMogoTrafficUploadProvider;
@@ -73,6 +75,11 @@ public class MogoServiceApis implements IMogoServiceApis {
return getApiInstance( IMogoSocketManager.class, MogoServicePaths.PATH_SOCKET_MANAGER );
}
@Override
public IMogoWebSocketManager getWebSocketManagerApi(Context context) {
return getApiInstance( IMogoWebSocketManager.class, MogoServicePaths.PATH_WEB_SOCKET_MANAGER );
}
@Override
public IMogoFragmentManager getFragmentManagerApi() {
return SingletonsHolder.get( IMogoFragmentManager.class );
@@ -189,11 +196,6 @@ public class MogoServiceApis implements IMogoServiceApis {
return getApiInstance( IMogoShareManager.class, MogoServicePaths.PATH_SHARE );
}
@Override
public IMogoObuManager getObuManager() {
return getApiInstance( IMogoObuManager.class, MogoServicePaths.PATH_OBU );
}
@Override
public IEventPanelProvider getEventPanelManager() {
return getApiInstance( IEventPanelProvider.class, MogoServicePaths.PATH_EVENT_PANEL );
@@ -216,27 +218,37 @@ public class MogoServiceApis implements IMogoServiceApis {
@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);
public IMogoTanluUiProvider getTanluUiApi() {
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 );
}
@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 );
}
@Override

View File

@@ -0,0 +1,19 @@
package com.mogo.service.impl.adas;
public
/**
* @author congtaowang
* @since 2020/10/22
*
* 描述
*/
class AdasControlCommandParameter {
public String action;
public Object result;
public AdasControlCommandParameter( String action, Object result ) {
this.action = action;
this.result = result;
}
}

View File

@@ -0,0 +1,119 @@
package com.mogo.service.impl.adas;
import android.text.TextUtils;
import com.mogo.commons.utils.MortonCode;
import com.mogo.service.adas.entity.ADASRecognizedListResult;
import com.mogo.service.adas.entity.ADASRecognizedResult;
import com.mogo.service.adas.entity.ADASWarnMessage;
import com.zhidao.support.adas.high.bean.RectInfo;
import com.zhidao.support.adas.high.bean.WarnMessageInfo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public
/**
* @author congtaowang
* @since 2020/10/25
*
* 对象转换类
*/
class AdasObjectUtils {
public static ADASWarnMessage fromAdasObject( WarnMessageInfo info ) {
if ( info == null ) {
return null;
}
ADASWarnMessage warnMessage = new ADASWarnMessage();
warnMessage.content = info.getContent();
warnMessage.level = info.getLevel();
try {
warnMessage.type = Integer.valueOf( info.getType() );
} catch ( NumberFormatException e ) {
return null;
}
warnMessage.value = info.getValue();
return warnMessage;
}
public static List< ADASRecognizedResult > fromAdasObject( RectInfo rectInfo ) {
if ( rectInfo == null
|| rectInfo.getModels() == null
|| rectInfo.getModels().isEmpty() ) {
return null;
}
List< ADASRecognizedResult > recognizedResults = new ArrayList<>();
for ( RectInfo.RectBean model : rectInfo.getModels() ) {
try {
ADASRecognizedResult result = fromAdasObject( model );
if ( result != null ) {
recognizedResults.add( result );
}
} catch ( Exception e ) {
e.printStackTrace();
}
}
return recognizedResults;
}
public static ADASRecognizedResult fromAdasObject( RectInfo.RectBean rectBean ) {
if ( rectBean == null ) {
return null;
}
ADASRecognizedResult result = new ADASRecognizedResult();
result.uuid = rectBean.getUuid();
result.lat = rectBean.getLat();
result.lon = rectBean.getLon();
result.type = Integer.valueOf( rectBean.getType() );
result.heading = rectBean.getHeading();
result.systemTime = Long.valueOf( rectBean.getSystemTime() );
result.satelliteTime = Long.valueOf( rectBean.getSatelliteTime() );
result.alt = rectBean.getAlt();
result.color = rectBean.getColor();
result.speed = rectBean.getSpeed();
result.carId = rectBean.getCarId();
result.mortonCode = MortonCode.wrapEncodeMorton( result.lon, result.lat );
return result;
}
public static List< ADASRecognizedListResult > regroupData( List< RectInfo > datums ) {
if ( datums == null || datums.isEmpty() ) {
return null;
}
Map< String, ADASRecognizedListResult > result = new HashMap<>();
for ( RectInfo rectInfo : datums ) {
if ( rectInfo == null || rectInfo.getModels() == null || rectInfo.getModels().isEmpty() ) {
continue;
}
List< RectInfo.RectBean > models = rectInfo.getModels();
for ( RectInfo.RectBean model : models ) {
if ( model == null || TextUtils.isEmpty( model.getUuid() ) ) {
continue;
}
ADASRecognizedListResult recognizedListResult = null;
if ( !result.containsKey( model.getUuid() ) ) {
recognizedListResult = new ADASRecognizedListResult();
recognizedListResult.latLonList = new ArrayList<>();
recognizedListResult.heading = model.getHeading();
recognizedListResult.speed = model.getSpeed();
recognizedListResult.type = Integer.valueOf( model.getType() );
recognizedListResult.uuid = model.getUuid();
result.put( model.getUuid(), recognizedListResult );
} else {
recognizedListResult = result.get( model.getUuid() );
recognizedListResult.distanceX = model.getDistance_x();
recognizedListResult.distanceY = model.getDistance_y();
}
recognizedListResult.latLonList.add( new ADASRecognizedListResult.LatLon( model.getLat(), model.getLon() ) );
}
}
if ( result.isEmpty() ) {
return null;
}
return new ArrayList<>( result.values() );
}
}

View File

@@ -3,6 +3,8 @@ package com.mogo.service.impl.adas;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.commons.AbsMogoApplication;
@@ -19,6 +21,12 @@ import com.mogo.module.common.utils.CarSeries;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.adas.IMogoADASController;
import com.mogo.service.adas.IMogoAdasDataCallback;
import com.mogo.service.adas.IMogoAdasRecognizedDataCallback;
import com.mogo.service.adas.IMogoAdasWarnMessageCallback;
import com.mogo.service.adas.RemoteControlAutoPilotParameters;
import com.mogo.service.adas.entity.ADASRecognizedListResult;
import com.mogo.service.adas.entity.ADASRecognizedResult;
import com.mogo.service.adas.entity.ADASWarnMessage;
import com.mogo.service.impl.singleton.SingletonsHolder;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.utils.TipToast;
@@ -34,15 +42,22 @@ import com.zhidao.adasconfig.common.config.EnumSkinStyle;
import com.zhidao.autopilot.support.api.AutopilotServiceManage;
import com.zhidao.autopilot.support.api.IAutopilotServiceStatusListener;
import com.zhidao.autopilot.support.api.IAutopolitDataCallBack;
import com.zhidao.support.adas.high.OnAdasListener;
import com.zhidao.support.adas.high.bean.RectInfo;
import com.zhidao.support.adas.high.bean.WarnMessageInfo;
import com.zhidao.support.adas.high.msg.MyMessageFactory;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import io.reactivex.schedulers.Schedulers;
import java.util.concurrent.CopyOnWriteArrayList;
import static com.mogo.module.common.utils.SPConst.getSpGuide;
@@ -69,10 +84,113 @@ public class MogoADASController implements IMogoADASController {
private IMogoStatusManager mStatusManager = SingletonsHolder.get( IMogoStatusManager.class );
private boolean mIsReleased = true;
private List<IMogoAdasDataCallback> adasDataCallbackList = new ArrayList<>();
private IAutopolitDataCallBack mAutopolitDataCallBack;
/**
* 获取adas前车距离
*/
private List< IMogoAdasDataCallback > mAdasDataCallbackList = new CopyOnWriteArrayList<>();
/**
* adas 报警数据回调
*/
private List< IMogoAdasWarnMessageCallback > mMogoAdasWarnMessageCallbackList = new CopyOnWriteArrayList<>();
/**
* adas 识别物体回调
*/
private List< IMogoAdasRecognizedDataCallback > mMogoAdasRecognizedDataCallbacks = new CopyOnWriteArrayList<>();
private RectInfo mLastFrameData;
private OnAdasListener mOnAdasListener = new OnAdasListenerAdapter() {
@Override
public void onRectData( RectInfo rectInfo ) {
// 物体识别返回
Logger.d( TAG, "onRectData = %s", rectInfo.toString() );
mLastFrameData = rectInfo;
handleAdasRecognizedData( rectInfo );
}
@Override
public void onWarnMessage( WarnMessageInfo warnMessageInfo ) {
if ( warnMessageInfo == null ) {
return;
}
// 警告消息
Logger.d( TAG, "onWarnMessage = %s", warnMessageInfo.toString() );
if ( mMogoAdasWarnMessageCallbackList.isEmpty() ) {
return;
}
final ADASWarnMessage warnMessage = AdasObjectUtils.fromAdasObject( warnMessageInfo );
if ( warnMessage == null ) {
return;
}
UiThreadHandler.post( () -> {
Iterator< IMogoAdasWarnMessageCallback > iMogoAdasWarnMessageCallbackIterator = mMogoAdasWarnMessageCallbackList.iterator();
while ( iMogoAdasWarnMessageCallbackIterator.hasNext() ) {
IMogoAdasWarnMessageCallback callback = iMogoAdasWarnMessageCallbackIterator.next();
if ( callback != null ) {
callback.onReceiveData( warnMessage );
}
}
} );
}
};
private long mLastRecordSeconds = 0L;
/**
* 缓存容器
*/
List< RectInfo > mCacheRecognizedDataSet = new ArrayList<>();
/**
* 处理数据将识别到的物体分组然后每1s进行一次回调
* 时间:系统时间
*
* @param rectInfo
*/
private void handleAdasRecognizedData( RectInfo rectInfo ) {
if ( rectInfo == null
|| rectInfo.getModels() == null
|| rectInfo.getModels().isEmpty() ) {
return;
}
long curTime = System.currentTimeMillis() / 1000;
if ( mLastRecordSeconds == 0L ) {
mLastRecordSeconds = curTime;
}
if ( mLastRecordSeconds != curTime ) {
invokeCallbackPerSecond( mCacheRecognizedDataSet );
mCacheRecognizedDataSet = new ArrayList<>();
}
mCacheRecognizedDataSet.add( rectInfo );
}
private void invokeCallbackPerSecond( List< RectInfo > data ) {
List< RectInfo > newRef = data;
List< ADASRecognizedListResult > recognizedListResults = AdasObjectUtils.regroupData( newRef );
if ( recognizedListResults == null || recognizedListResults.isEmpty() ) {
return;
}
if ( !mMogoAdasRecognizedDataCallbacks.isEmpty() ) {
for ( IMogoAdasRecognizedDataCallback callback : mMogoAdasRecognizedDataCallbacks ) {
if ( callback == null ) {
continue;
}
callback.onAdasDataCallback( recognizedListResults );
}
}
}
private MyMessageFactory mAdasMessageFactory;
@Override
public void openADAS() {
showADAS();
@@ -97,6 +215,10 @@ public class MogoADASController implements IMogoADASController {
return;
}
}
if ( MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().isVrMode() ) {
return;
}
Logger.d( TAG, Log.getStackTraceString( new Throwable() ) );
init( AbsMogoApplication.getApp() );
AutopilotServiceManage.getInstance().registerAutopilotServiceStatusListener( new IAutopilotServiceStatusListener() {
@Override
@@ -126,7 +248,17 @@ public class MogoADASController implements IMogoADASController {
@Override
public void cameraEyeDetectResult( String detectResult ) {
try {
JSONObject jsonObjectWs = new JSONObject( detectResult );
String action = jsonObjectWs.optString( "action" );
if ( TextUtils.isEmpty( action ) ) {
Logger.w( TAG, "--->action is null" );
return;
}
mAdasMessageFactory.createMessage( action ).handlerMsg( GsonUtil.getGson(), mOnAdasListener, detectResult );
} catch ( JSONException e ) {
e.printStackTrace();
}
}
@Override
@@ -239,6 +371,8 @@ public class MogoADASController implements IMogoADASController {
@Override
public void init( Context context ) {
AutopilotServiceManage.getInstance().init( context );
mIsReleased = false;
mAdasMessageFactory = new MyMessageFactory();
this.context = context;
}
@@ -304,22 +438,26 @@ public class MogoADASController implements IMogoADASController {
}
@Override
public void notifyAdas( String json ) {
public void aiCloudToAdasData( RemoteControlAutoPilotParameters result ) {
try {
// AutopilotServiceManage.getInstance().aiCloudToAdasData( json );
syncControlCmdToADAS( "aiCloudToStartAutopilot", result );
} catch ( Exception e ) {
Logger.e( TAG, e, "notifyAdas" );
Logger.e( TAG, e, "aiCloudToAdasData" );
}
}
@Override
public void addAdasDataCallback(IMogoAdasDataCallback callback) {
adasDataCallbackList.add(callback);
}
@Override
public void removeAdasDataCallback(IMogoAdasDataCallback callback) {
adasDataCallbackList.remove(callback);
/**
* @param action
* @param result
*/
private void syncControlCmdToADAS( String action, Object result ) {
AdasControlCommandParameter parameter = new AdasControlCommandParameter( action, result );
//位置信息 action是aiCloudToStartAutopilot
try {
AutopilotServiceManage.getInstance().aiCloudToAdasData( GsonUtil.jsonFromObject( parameter ) );
} catch ( Exception e ) {
e.printStackTrace();
}
}
private static final String TEST_SN = "ZD802B1932L00617";
@@ -365,6 +503,69 @@ public class MogoADASController implements IMogoADASController {
@Override
public void release() {
mIsReleased = true;
AutopilotServiceManage.getInstance().unRegisterAutopilotDataListener( mAutopolitDataCallBack );
AutopilotServiceManage.getInstance().release();
}
@Override
public void addAdasDataCallback( IMogoAdasDataCallback callback ) {
if ( callback == null ) {
return;
}
if ( !mAdasDataCallbackList.contains( callback ) ) {
mAdasDataCallbackList.add( callback );
}
}
@Override
public void removeAdasDataCallback( IMogoAdasDataCallback callback ) {
if ( callback == null ) {
return;
}
mAdasDataCallbackList.remove( callback );
}
@Override
public void addAdasWarnMessageCallback( IMogoAdasWarnMessageCallback callback ) {
if ( callback == null ) {
return;
}
if ( !mMogoAdasWarnMessageCallbackList.contains( callback ) ) {
mMogoAdasWarnMessageCallbackList.add( callback );
}
}
@Override
public void removeAdasWarnMessageCallback( IMogoAdasWarnMessageCallback callback ) {
if ( callback == null ) {
return;
}
mMogoAdasWarnMessageCallbackList.remove( callback );
}
@Override
public List< ADASRecognizedResult > getLastADASRecognizedResult() {
RectInfo rectInfo = mLastFrameData;
List< ADASRecognizedResult > recognizedResultList = AdasObjectUtils.fromAdasObject( rectInfo );
return recognizedResultList;
}
@Override
public void addAdasRecognizedDataCallback( IMogoAdasRecognizedDataCallback callback ) {
if ( callback == null ) {
return;
}
if ( !mMogoAdasRecognizedDataCallbacks.contains( callback ) ) {
mMogoAdasRecognizedDataCallbacks.add( callback );
}
}
@Override
public void removeAdasRecognizedDataCallback( IMogoAdasRecognizedDataCallback callback ) {
if ( callback == null ) {
return;
}
mMogoAdasRecognizedDataCallbacks.remove( callback );
}
}

View File

@@ -0,0 +1,60 @@
package com.mogo.service.impl.adas;
import com.zhidao.support.adas.high.OnAdasListener;
import com.zhidao.support.adas.high.bean.AutopilotStatus;
import com.zhidao.support.adas.high.bean.CarLaneInfo;
import com.zhidao.support.adas.high.bean.CarStateInfo;
import com.zhidao.support.adas.high.bean.LightStatueInfo;
import com.zhidao.support.adas.high.bean.ObstaclesInfo;
import com.zhidao.support.adas.high.bean.RectInfo;
import com.zhidao.support.adas.high.bean.WarnMessageInfo;
public
/**
* @author congtaowang
* @since 2020/10/22
*
* 描述
*/
abstract class OnAdasListenerAdapter implements OnAdasListener {
@Override
public void onWarnMessage( WarnMessageInfo warnMessageInfo ) {
}
@Override
public void onVideoSize( int width, int height ) {
}
@Override
public void onRectData( RectInfo rectInfo ) {
}
@Override
public void onCarStateData( CarStateInfo carStateInfo ) {
}
@Override
public void onLightStateData( LightStatueInfo lightStatueInfo ) {
}
@Override
public void onObstaclesInfo( ObstaclesInfo obstaclesInfo ) {
}
@Override
public void onCarLaneInfo( CarLaneInfo carLaneInfo ) {
}
@Override
public void autopilotStatus( AutopilotStatus autopilotStatus ) {
}
}

View File

@@ -0,0 +1,63 @@
package com.mogo.service.impl.connection;
import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.service.connection.IMogoOnWebSocketMessageListener;
import com.mogo.service.connection.IMogoWebSocketManager;
import com.mogo.utils.logger.Logger;
import java.lang.reflect.Method;
import static com.mogo.service.MogoServicePaths.PATH_WEB_SOCKET_MANAGER;
@Route(path = PATH_WEB_SOCKET_MANAGER)
public class MogoWebSocketManager implements IMogoWebSocketManager {
private static final String TAG = "MogoWebSocketManager";
private IMogoWebSocketManager mDelegate;
@Override
public void init(Context context, String appId) {
if (mDelegate != null) {
mDelegate.init(context, appId);
}
}
@Override
public void registerOnWebSocketMessageListener( IMogoOnWebSocketMessageListener listener) {
if (mDelegate != null) {
mDelegate.registerOnWebSocketMessageListener( listener);
}
}
@Override
public void unregisterOnWebSocketMessageListener( IMogoOnWebSocketMessageListener listener) {
if (mDelegate != null) {
mDelegate.unregisterOnWebSocketMessageListener( listener );
}
}
@Override
public void sendMsg(Object body, IMogoOnWebSocketMessageListener listener) {
if (mDelegate != null) {
mDelegate.sendMsg(body, listener);
}
}
@Override
public void init(Context context) {
try {
Class<?> clazz = Class.forName("com.mogo.base.websocket.WebSocketManager");
Method getInstanceMethod = clazz.getMethod("getInstance", Context.class);
getInstanceMethod.setAccessible(true);
mDelegate = (IMogoWebSocketManager) getInstanceMethod.invoke(null, context);
} catch (Exception e) {
Logger.e(TAG, e, "error.");
}
if (mDelegate != null) {
mDelegate.init(context);
}
}
}

View File

@@ -49,6 +49,11 @@ public class MogoStatusManager implements IMogoStatusManager {
return get_bool_val( StatusDescriptor.VOICE_UI );
}
@Override
public boolean isVrMode() {
return get_bool_val(StatusDescriptor.VR_MODE);
}
@Override
public boolean isADASShow() {
return get_bool_val( StatusDescriptor.ADAS_UI );
@@ -152,6 +157,11 @@ public class MogoStatusManager implements IMogoStatusManager {
doSetStatus(tag, StatusDescriptor.TOP_VIEW, show);
}
@Override
public void setVrMode(String tag, boolean vrMode) {
doSetStatus(tag, StatusDescriptor.VR_MODE, vrMode);
}
@Override
public void setVoiceUIShow( String tag, boolean show ) {
doSetStatus( tag, StatusDescriptor.VOICE_UI, show );