Merge branch 'feature/v1.0.2' of http://gitlab.zhidaoauto.com/ecos/yycp-service/Launcher into feature/v1.0.2
This commit is contained in:
1
.idea/gradle.xml
generated
1
.idea/gradle.xml
generated
@@ -4,7 +4,6 @@
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="delegatedBuild" value="false" />
|
||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="modules">
|
||||
|
||||
@@ -42,7 +42,6 @@ public class MogoApplication extends AbsMogoApplication {
|
||||
crashSystem.init();
|
||||
//设置debug模式,日志不上传
|
||||
crashSystem.setDebug(BuildConfig.DEBUG);
|
||||
|
||||
Logger.init( BuildConfig.DEBUG ? LogLevel.DEBUG : LogLevel.OFF );
|
||||
|
||||
//运营位卡片,需要默认显示,放在第一个加载
|
||||
|
||||
@@ -72,7 +72,7 @@ public class Utils {
|
||||
try {
|
||||
Class< ? > c = Class.forName( PROPERTIES );
|
||||
Method get = c.getMethod( GET, String.class );
|
||||
value = ( String ) get.invoke( c, GSM_SERIAL );
|
||||
value = ( String ) get.invoke( c, name );
|
||||
} catch ( ClassNotFoundException var3 ) {
|
||||
var3.printStackTrace();
|
||||
} catch ( NoSuchMethodException var4 ) {
|
||||
|
||||
@@ -100,11 +100,15 @@ public class SocketManager implements IMogoSocketManager, OnSocketReceiveCallbac
|
||||
}
|
||||
cacheLastReceivedMsgId( msgId );
|
||||
}
|
||||
Object object = null;
|
||||
while ( iterator.hasNext() ) {
|
||||
IMogoOnMessageListener listener = iterator.next();
|
||||
if ( object == null ) {
|
||||
object = GsonUtil.objectFromJson( payload.getPayload().toStringUtf8(), listener.target() );
|
||||
}
|
||||
if ( listener != null ) {
|
||||
Logger.d( TAG, "received msg == %s, msgId = %s", payload.getPayload().toStringUtf8(), msgId );
|
||||
listener.onMsgReceived( GsonUtil.objectFromJson( payload.getPayload().toStringUtf8(), listener.target() ) );
|
||||
Logger.d( TAG, "received msgId = %s", msgId );
|
||||
listener.onMsgReceived( object );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ MOGO_MODULE_BACK_VERSION=1.0.2-SNAPSHOT
|
||||
|
||||
## 工程外部模块
|
||||
# 探路
|
||||
MOGO_MODULE_TANLU_VERSION=1.0.0-SNAPSHOT
|
||||
MOGO_MODULE_TANLU_VERSION=1.0.1-SNAPSHOT
|
||||
# 车聊聊
|
||||
CARCHATTING_VERSION=1.0.1-SNAPSHOT
|
||||
# 车聊聊接口
|
||||
|
||||
@@ -12,6 +12,7 @@ import android.view.View;
|
||||
import android.view.animation.Interpolator;
|
||||
|
||||
import com.amap.api.maps.AMap;
|
||||
import com.amap.api.maps.AMapUtils;
|
||||
import com.amap.api.maps.CameraUpdateFactory;
|
||||
import com.amap.api.maps.model.BitmapDescriptorFactory;
|
||||
import com.amap.api.maps.model.CameraPosition;
|
||||
@@ -33,10 +34,12 @@ import com.amap.api.navi.model.NaviInfo;
|
||||
import com.mogo.map.IMogoMap;
|
||||
import com.mogo.map.IMogoMapView;
|
||||
import com.mogo.map.MogoLatLng;
|
||||
import com.mogo.map.exception.MogoMapException;
|
||||
import com.mogo.map.impl.amap.marker.AMapMarkerWrapper;
|
||||
import com.mogo.map.impl.amap.message.AMapMessageListener;
|
||||
import com.mogo.map.impl.amap.message.AMapMessageManager;
|
||||
import com.mogo.map.impl.amap.navi.NaviClient;
|
||||
import com.mogo.map.impl.amap.utils.MogoMapUtils;
|
||||
import com.mogo.map.impl.amap.utils.ObjectUtils;
|
||||
import com.mogo.map.listener.MogoMapListenerHandler;
|
||||
import com.mogo.map.marker.IMogoMarker;
|
||||
@@ -143,8 +146,6 @@ public class AMapNaviViewWrapper implements IMogoMapView,
|
||||
mMapView.setRouteOverlayVisible( false );
|
||||
mMapView.setCarOverlayVisible( false );
|
||||
mMapView.setNaviMode( AMapNaviView.CAR_UP_MODE );
|
||||
|
||||
setRenderFps( 15 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -433,7 +434,7 @@ public class AMapNaviViewWrapper implements IMogoMapView,
|
||||
Logger.e( TAG, "latlng = null or is illegal" );
|
||||
return;
|
||||
}
|
||||
mockTouchEvent();
|
||||
loseLockMode();
|
||||
mMapView.getMap()
|
||||
.moveCamera( CameraUpdateFactory.newLatLng( new LatLng( latLng.lat, latLng.lng ) ) );
|
||||
}
|
||||
@@ -473,6 +474,24 @@ public class AMapNaviViewWrapper implements IMogoMapView,
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loseLockMode() {
|
||||
mockTouchEvent();
|
||||
}
|
||||
|
||||
/**
|
||||
* 模拟点击事件,达到锁车->普通事件
|
||||
*/
|
||||
private void mockTouchEvent() {
|
||||
long downTime = SystemClock.uptimeMillis();
|
||||
long eventTime = SystemClock.uptimeMillis() + 100;
|
||||
int metaState = 0;
|
||||
MotionEvent motionEvent = MotionEvent.obtain( downTime, eventTime, MotionEvent.ACTION_DOWN, 0, 0, metaState );
|
||||
mMapView.dispatchTouchEvent( motionEvent );
|
||||
MotionEvent upEvent = MotionEvent.obtain( downTime + 100, eventTime + 100, MotionEvent.ACTION_UP, 0, 0, metaState );
|
||||
mMapView.dispatchTouchEvent( upEvent );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLockZoom( int var1 ) {
|
||||
if ( checkAMapView() ) {
|
||||
@@ -630,19 +649,6 @@ public class AMapNaviViewWrapper implements IMogoMapView,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 模拟点击事件,达到锁车->普通事件
|
||||
*/
|
||||
private void mockTouchEvent() {
|
||||
long downTime = SystemClock.uptimeMillis();
|
||||
long eventTime = SystemClock.uptimeMillis() + 100;
|
||||
int metaState = 0;
|
||||
MotionEvent motionEvent = MotionEvent.obtain( downTime, eventTime, MotionEvent.ACTION_DOWN, 0, 0, metaState );
|
||||
mMapView.dispatchTouchEvent( motionEvent );
|
||||
MotionEvent upEvent = MotionEvent.obtain( downTime + 100, eventTime + 100, MotionEvent.ACTION_UP, 0, 0, metaState );
|
||||
mMapView.dispatchTouchEvent( upEvent );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRenderFps( int fps ) {
|
||||
if ( checkAMapView() ) {
|
||||
@@ -654,24 +660,18 @@ public class AMapNaviViewWrapper implements IMogoMapView,
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showBounds( List< MogoLatLng > lonLats, Rect bound ) {
|
||||
if ( checkAMapView() ) {
|
||||
if ( lonLats == null ) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
LatLngBounds.Builder builder = new LatLngBounds.Builder();
|
||||
for ( MogoLatLng lonLat : lonLats ) {
|
||||
builder.include( ObjectUtils.fromMogo2( lonLat ) );
|
||||
}
|
||||
if ( bound == null ) {
|
||||
bound = new Rect();
|
||||
}
|
||||
LatLngBounds latLngBounds = builder.build();
|
||||
mMapView.getMap().moveCamera( CameraUpdateFactory.newLatLngBoundsRect( latLngBounds, bound.left, bound.right, bound.top, bound.bottom ) );
|
||||
} catch ( Exception e ) {
|
||||
Logger.e( TAG, e, "error." );
|
||||
public void showBounds( String tag, MogoLatLng carPosition, List< MogoLatLng > lonLats, Rect bound, boolean lockCarPosition ) {
|
||||
if ( !checkAMapView() ) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
LatLngBounds latLngBounds = MogoMapUtils.getLatLngBounds( carPosition, lonLats, lockCarPosition );
|
||||
if ( !lockCarPosition ) {
|
||||
loseLockMode();
|
||||
}
|
||||
mMapView.getMap().moveCamera( CameraUpdateFactory.newLatLngBoundsRect( latLngBounds, bound.left, bound.right, bound.top, bound.bottom ) );
|
||||
} catch ( Exception e ) {
|
||||
Logger.e( TAG, e, "%s error.", tag );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -681,4 +681,12 @@ public class AMapNaviViewWrapper implements IMogoMapView,
|
||||
mMapView.getMap().runOnDrawFrame();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public float calculateLineDistance( MogoLatLng p1, MogoLatLng p2 ) throws Exception {
|
||||
if ( p1 == null || p2 == null ) {
|
||||
throw new Exception( "计算距离的点不能为 null" );
|
||||
}
|
||||
return AMapUtils.calculateLineDistance( ObjectUtils.fromMogo2( p1 ), ObjectUtils.fromMogo2( p2 ) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@ import com.amap.api.navi.AimlessModeListener;
|
||||
import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
|
||||
import com.amap.api.navi.model.AimLessModeCongestionInfo;
|
||||
import com.amap.api.navi.model.AimLessModeStat;
|
||||
import com.mogo.map.impl.amap.utils.ObjectUtils;
|
||||
import com.mogo.map.navi.MogoCongestionInfo;
|
||||
import com.mogo.map.navi.MogoNaviListenerHandler;
|
||||
import com.mogo.map.navi.MogoTraffic;
|
||||
|
||||
@@ -17,179 +19,18 @@ public class AimlessModeListenerAdapter implements AimlessModeListener {
|
||||
|
||||
@Override
|
||||
public void onUpdateTrafficFacility( AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos ) {
|
||||
if ( aMapNaviTrafficFacilityInfos == null || aMapNaviTrafficFacilityInfos.length == 0 ) {
|
||||
return;
|
||||
MogoTraffic traffic = ObjectUtils.fromAMap( aMapNaviTrafficFacilityInfos );
|
||||
if ( traffic != null ) {
|
||||
MogoNaviListenerHandler.getInstance().onUpdateTraffic2( traffic );
|
||||
}
|
||||
int speedLimit = 0;
|
||||
for ( AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo : aMapNaviTrafficFacilityInfos ) {
|
||||
if ( aMapNaviTrafficFacilityInfo == null ) {
|
||||
continue;
|
||||
}
|
||||
speedLimit = aMapNaviTrafficFacilityInfo.getLimitSpeed();
|
||||
if ( aMapNaviTrafficFacilityInfo.getBroadcastType() == 4 && aMapNaviTrafficFacilityInfo.getLimitSpeed() > 0 ) {
|
||||
MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_AIM );
|
||||
traffic.setDistance( aMapNaviTrafficFacilityInfo.getDistance() );
|
||||
traffic.setSpeedLimit( aMapNaviTrafficFacilityInfo.getLimitSpeed() );
|
||||
traffic.setDesc( "测速摄像头、测速雷达" );
|
||||
MogoNaviListenerHandler.getInstance().onUpdateTraffic( traffic );
|
||||
}
|
||||
}
|
||||
if ( speedLimit <= 0 ) {
|
||||
MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_AIM );
|
||||
traffic.setDistance( 0 );
|
||||
traffic.setSpeedLimit( 0 );
|
||||
traffic.setDesc( "测速摄像头、测速雷达" );
|
||||
MogoNaviListenerHandler.getInstance().onUpdateTraffic( traffic );
|
||||
}
|
||||
// MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_AIM );
|
||||
// traffic.setDistance( aMapNaviTrafficFacilityInfos[0].getDistance() );
|
||||
// traffic.setSpeedLimit( aMapNaviTrafficFacilityInfos[0].getLimitSpeed() );
|
||||
// switch ( aMapNaviTrafficFacilityInfos[0].getBroadcastType() ) {
|
||||
// case 0:
|
||||
// traffic.setDesc( "未知道路设施" );
|
||||
// break;
|
||||
// case 4:
|
||||
// traffic.setDesc( "测速摄像头、测速雷达" );
|
||||
// break;
|
||||
// case 5:
|
||||
// traffic.setDesc( "违章摄像头" );
|
||||
// break;
|
||||
// case 10:
|
||||
// traffic.setDesc( "请谨慎驾驶" );
|
||||
// break;
|
||||
// case 11:
|
||||
// traffic.setDesc( "有连续拍照" );
|
||||
// break;
|
||||
// case 12:
|
||||
// traffic.setDesc( "铁路道口" );
|
||||
// break;
|
||||
// case 13:
|
||||
// traffic.setDesc( "注意落石(左侧)" );
|
||||
// break;
|
||||
// case 14:
|
||||
// traffic.setDesc( "事故易发地段" );
|
||||
// break;
|
||||
// case 15:
|
||||
// traffic.setDesc( "易滑" );
|
||||
// break;
|
||||
// case 16:
|
||||
// traffic.setDesc( "村庄" );
|
||||
// break;
|
||||
// case 18:
|
||||
// traffic.setDesc( "前方学校" );
|
||||
// break;
|
||||
// case 19:
|
||||
// traffic.setDesc( "有人看管的铁路道口" );
|
||||
// break;
|
||||
// case 20:
|
||||
// traffic.setDesc( "无人看管的铁路道口" );
|
||||
// break;
|
||||
// case 21:
|
||||
// traffic.setDesc( "两侧变窄" );
|
||||
// break;
|
||||
// case 22:
|
||||
// traffic.setDesc( "向左急弯路" );
|
||||
// break;
|
||||
// case 23:
|
||||
// traffic.setDesc( "向右急弯路" );
|
||||
// break;
|
||||
// case 24:
|
||||
// traffic.setDesc( "反向弯路" );
|
||||
// break;
|
||||
// case 25:
|
||||
// traffic.setDesc( "连续弯路" );
|
||||
// break;
|
||||
// case 26:
|
||||
// traffic.setDesc( "左侧合流标识牌" );
|
||||
// break;
|
||||
// case 27:
|
||||
// traffic.setDesc( "右侧合流标识牌" );
|
||||
// break;
|
||||
// case 28:
|
||||
// traffic.setDesc( "监控摄像头" );
|
||||
// break;
|
||||
// case 29:
|
||||
// traffic.setDesc( "专用道摄像头" );
|
||||
// break;
|
||||
// case 31:
|
||||
// traffic.setDesc( "禁止超车" );
|
||||
// break;
|
||||
// case 36:
|
||||
// traffic.setDesc( "右侧变窄" );
|
||||
// break;
|
||||
// case 37:
|
||||
// traffic.setDesc( "左侧变窄" );
|
||||
// break;
|
||||
// case 38:
|
||||
// traffic.setDesc( "窄桥" );
|
||||
// break;
|
||||
// case 39:
|
||||
// traffic.setDesc( "左右绕行" );
|
||||
// break;
|
||||
// case 40:
|
||||
// traffic.setDesc( "左侧绕行" );
|
||||
// break;
|
||||
// case 41:
|
||||
// traffic.setDesc( "右侧绕行" );
|
||||
// break;
|
||||
// case 42:
|
||||
// traffic.setDesc( "注意落石(右侧)" );
|
||||
// break;
|
||||
// case 43:
|
||||
// traffic.setDesc( "傍山险路(左侧)" );
|
||||
// break;
|
||||
// case 44:
|
||||
// traffic.setDesc( "傍山险路(右侧)" );
|
||||
// break;
|
||||
// case 47:
|
||||
// traffic.setDesc( "上陡坡" );
|
||||
// break;
|
||||
// case 48:
|
||||
// traffic.setDesc( "下陡坡" );
|
||||
// break;
|
||||
// case 49:
|
||||
// traffic.setDesc( "过水路面" );
|
||||
// break;
|
||||
// case 50:
|
||||
// traffic.setDesc( "路面不平" );
|
||||
// break;
|
||||
// case 52:
|
||||
// traffic.setDesc( "慢行" );
|
||||
// break;
|
||||
// case 53:
|
||||
// traffic.setDesc( "注意危险" );
|
||||
// break;
|
||||
// case 58:
|
||||
// traffic.setDesc( "隧道" );
|
||||
// break;
|
||||
// case 59:
|
||||
// traffic.setDesc( "渡口" );
|
||||
// break;
|
||||
// case 92:
|
||||
// traffic.setDesc( "闯红灯" );
|
||||
// break;
|
||||
// case 93:
|
||||
// traffic.setDesc( "应急车道" );
|
||||
// break;
|
||||
// case 94:
|
||||
// traffic.setDesc( "非机动车道" );
|
||||
// break;
|
||||
// case 100:
|
||||
// traffic.setDesc( "不绑定电子眼高发地" );
|
||||
// break;
|
||||
// case 101:
|
||||
// traffic.setDesc( "车道违章" );
|
||||
// break;
|
||||
// case 102:
|
||||
// traffic.setDesc( "超速违章" );
|
||||
// break;
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateAimlessModeElecCameraInfo( AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos ) {
|
||||
|
||||
MogoTraffic traffic = ObjectUtils.fromAMap( aMapNaviTrafficFacilityInfos );
|
||||
if ( traffic != null ) {
|
||||
MogoNaviListenerHandler.getInstance().onUpdateTraffic2( traffic );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -199,6 +40,9 @@ public class AimlessModeListenerAdapter implements AimlessModeListener {
|
||||
|
||||
@Override
|
||||
public void updateAimlessModeCongestionInfo( AimLessModeCongestionInfo aimLessModeCongestionInfo ) {
|
||||
|
||||
MogoCongestionInfo congestionInfo = ObjectUtils.fromAMap( aimLessModeCongestionInfo );
|
||||
if ( congestionInfo != null ) {
|
||||
MogoNaviListenerHandler.getInstance().onUpdateCongestion( congestionInfo );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,7 +109,6 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter {
|
||||
MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_NAVI );
|
||||
traffic.setDistance( aMapNaviCameraInfo.getCameraDistance() );
|
||||
traffic.setSpeedLimit( aMapNaviCameraInfo.getCameraSpeed() );
|
||||
traffic.setDesc( "测速摄像" );
|
||||
MogoNaviListenerHandler.getInstance().onUpdateTraffic( traffic );
|
||||
}
|
||||
|
||||
@@ -147,7 +146,6 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter {
|
||||
MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_NAVI );
|
||||
traffic.setDistance( 0 );
|
||||
traffic.setSpeedLimit( 0 );
|
||||
traffic.setDesc( "测速摄像" );
|
||||
MogoNaviListenerHandler.getInstance().onUpdateTraffic( traffic );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,6 +98,13 @@ public class AMapUIController implements IMogoMapUIController {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loseLockMode() {
|
||||
if ( mClient != null ) {
|
||||
mClient.loseLockMode();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLockZoom(int var1) {
|
||||
if (mClient != null) {
|
||||
@@ -190,9 +197,9 @@ public class AMapUIController implements IMogoMapUIController {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showBounds(List<MogoLatLng> lonLats, Rect bound) {
|
||||
if (mClient != null) {
|
||||
mClient.showBounds(lonLats, bound);
|
||||
public void showBounds( String tag, MogoLatLng carPosition, List< MogoLatLng > lonLats, Rect bound, boolean lockCarPosition ) {
|
||||
if ( mClient != null ) {
|
||||
mClient.showBounds( tag, carPosition, lonLats, bound, lockCarPosition );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -202,4 +209,12 @@ public class AMapUIController implements IMogoMapUIController {
|
||||
mClient.forceRender();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public float calculateLineDistance( MogoLatLng p1, MogoLatLng p2 ) throws Exception {
|
||||
if ( mClient != null ) {
|
||||
return mClient.calculateLineDistance( p1, p2 );
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
package com.mogo.map.impl.amap.utils;
|
||||
|
||||
import com.amap.api.maps.model.LatLng;
|
||||
import com.amap.api.maps.model.LatLngBounds;
|
||||
import com.mogo.map.MogoLatLng;
|
||||
import com.mogo.map.exception.MogoMapException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author congtaowang
|
||||
* @since 2020-03-04
|
||||
* <p>
|
||||
* 地图工具类
|
||||
*/
|
||||
public class MogoMapUtils {
|
||||
|
||||
public static LatLngBounds getLatLngBounds( MogoLatLng carPosition, List< MogoLatLng > lonLats, boolean lockCarPosition ) throws Exception {
|
||||
|
||||
if ( lonLats == null || lonLats.isEmpty() ) {
|
||||
throw new MogoMapException( "经纬度不能为null或空集合" );
|
||||
}
|
||||
LatLngBounds.Builder builder = new LatLngBounds.Builder();
|
||||
for ( MogoLatLng lonLat : lonLats ) {
|
||||
builder.include( ObjectUtils.fromMogo2( lonLat ) );
|
||||
}
|
||||
if ( carPosition != null && !lockCarPosition ) {
|
||||
builder.include( ObjectUtils.fromMogo2( carPosition ) );
|
||||
}
|
||||
LatLngBounds latLngBounds = builder.build();
|
||||
if ( !lockCarPosition ) {
|
||||
return latLngBounds;
|
||||
}
|
||||
|
||||
if ( carPosition == null ) {
|
||||
throw new MogoMapException( "自车位置经纬度信息不能为空" );
|
||||
}
|
||||
|
||||
if ( latLngBounds.northeast == null && latLngBounds.southwest == null ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
double south = 0.0;
|
||||
double west = 0.0;
|
||||
|
||||
double east = 0.0;
|
||||
double north = 0.0;
|
||||
|
||||
double dLat = 0.0;
|
||||
double dLon = 0.0;
|
||||
|
||||
if ( latLngBounds.northeast == null ) {
|
||||
dLat = Math.abs( carPosition.lat - latLngBounds.southwest.latitude );
|
||||
dLon = Math.abs( carPosition.lng - latLngBounds.southwest.longitude );
|
||||
} else if ( latLngBounds.southwest == null ) {
|
||||
dLat = Math.abs( carPosition.lat - latLngBounds.northeast.latitude );
|
||||
dLon = Math.abs( carPosition.lng - latLngBounds.northeast.longitude );
|
||||
} else {
|
||||
final double dLat1 = Math.abs( carPosition.lat - latLngBounds.southwest.latitude );
|
||||
final double dLon1 = Math.abs( carPosition.lng - latLngBounds.southwest.longitude );
|
||||
final double dLat2 = Math.abs( carPosition.lat - latLngBounds.northeast.latitude );
|
||||
final double dLon2 = Math.abs( carPosition.lng - latLngBounds.northeast.longitude );
|
||||
dLat = dLat1 > dLat2 ? dLat1 : dLat2;
|
||||
dLon = dLon1 > dLon2 ? dLon1 : dLon2;
|
||||
}
|
||||
|
||||
west = carPosition.lat - dLat;
|
||||
south = carPosition.lng + dLon;
|
||||
|
||||
east = carPosition.lat + dLat;
|
||||
north = carPosition.lng - dLon;
|
||||
|
||||
if ( south == 0.0 || west == 0.0 || east == 0.0 || north == 0.0 ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new LatLngBounds.Builder().include( new LatLng( east, north ) ).include( new LatLng( west, south ) ).build();
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,9 @@ import com.amap.api.maps.model.BitmapDescriptorFactory;
|
||||
import com.amap.api.maps.model.LatLng;
|
||||
import com.amap.api.maps.model.MarkerOptions;
|
||||
import com.amap.api.maps.model.Poi;
|
||||
import com.amap.api.navi.model.AMapCongestionLink;
|
||||
import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
|
||||
import com.amap.api.navi.model.AimLessModeCongestionInfo;
|
||||
import com.amap.api.navi.model.NaviInfo;
|
||||
import com.amap.api.navi.model.NaviLatLng;
|
||||
import com.amap.api.services.core.LatLonPoint;
|
||||
@@ -38,7 +41,11 @@ import com.mogo.map.location.MogoLocation;
|
||||
import com.mogo.map.marker.IMogoMarkerIconViewCreator;
|
||||
import com.mogo.map.marker.MogoMarkerOptions;
|
||||
import com.mogo.map.model.MogoPoi;
|
||||
import com.mogo.map.navi.MogoCongestionInfo;
|
||||
import com.mogo.map.navi.MogoCongestionLink;
|
||||
import com.mogo.map.navi.MogoNaviInfo;
|
||||
import com.mogo.map.navi.MogoNaviListenerHandler;
|
||||
import com.mogo.map.navi.MogoTraffic;
|
||||
import com.mogo.map.search.geo.MogoAoiItem;
|
||||
import com.mogo.map.search.geo.MogoBusinessArea;
|
||||
import com.mogo.map.search.geo.MogoCrossroad;
|
||||
@@ -62,6 +69,7 @@ import com.mogo.map.search.poisearch.MogoSearchBound;
|
||||
import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -639,4 +647,61 @@ public class ObjectUtils {
|
||||
mogoNaviInfo.setCurrentSpeed( naviInfo.getLimitSpeed() );
|
||||
return mogoNaviInfo;
|
||||
}
|
||||
|
||||
public static MogoCongestionInfo fromAMap( AimLessModeCongestionInfo aimLessModeCongestionInfo ) {
|
||||
if ( aimLessModeCongestionInfo == null ) {
|
||||
return null;
|
||||
}
|
||||
MogoCongestionInfo congestionInfo = new MogoCongestionInfo();
|
||||
congestionInfo.setCongestionStatus( aimLessModeCongestionInfo.getCongestionStatus() );
|
||||
congestionInfo.setEventLat( aimLessModeCongestionInfo.getEventLat() );
|
||||
congestionInfo.setEventLon( aimLessModeCongestionInfo.getEventLon() );
|
||||
congestionInfo.setEventType( aimLessModeCongestionInfo.getEventType() );
|
||||
congestionInfo.setCongestionLinks( new ArrayList< MogoCongestionLink >() );
|
||||
congestionInfo.setLength( aimLessModeCongestionInfo.getLength() );
|
||||
congestionInfo.setRoadName( aimLessModeCongestionInfo.getRoadName() );
|
||||
congestionInfo.setTime( aimLessModeCongestionInfo.getTime() );
|
||||
if ( aimLessModeCongestionInfo.getAmapCongestionLinks() != null
|
||||
&& aimLessModeCongestionInfo.getAmapCongestionLinks().length != 0 ) {
|
||||
for ( AMapCongestionLink amapCongestionLink : aimLessModeCongestionInfo.getAmapCongestionLinks() ) {
|
||||
if ( amapCongestionLink == null ) {
|
||||
continue;
|
||||
}
|
||||
MogoCongestionLink link = new MogoCongestionLink();
|
||||
link.setCongestionStatus( amapCongestionLink.getCongestionStatus() );
|
||||
if ( amapCongestionLink.getCoords() != null ) {
|
||||
link.setCoords( new ArrayList< MogoLatLng >() );
|
||||
Iterator< NaviLatLng > iterator = amapCongestionLink.getCoords().iterator();
|
||||
while ( iterator.hasNext() ) {
|
||||
NaviLatLng naviLatLng = iterator.next();
|
||||
if ( naviLatLng == null ) {
|
||||
continue;
|
||||
}
|
||||
link.getCoords().add( new MogoLatLng( naviLatLng.getLatitude(), naviLatLng.getLongitude() ) );
|
||||
}
|
||||
}
|
||||
congestionInfo.getCongestionLinks().add( link );
|
||||
}
|
||||
}
|
||||
return congestionInfo;
|
||||
}
|
||||
|
||||
public static MogoTraffic fromAMap( AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos ) {
|
||||
if ( aMapNaviTrafficFacilityInfos == null || aMapNaviTrafficFacilityInfos.length == 0 ) {
|
||||
return null;
|
||||
}
|
||||
for ( AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo : aMapNaviTrafficFacilityInfos ) {
|
||||
if ( aMapNaviTrafficFacilityInfo == null ) {
|
||||
continue;
|
||||
}
|
||||
MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_AIM );
|
||||
traffic.setDistance( aMapNaviTrafficFacilityInfo.getDistance() );
|
||||
traffic.setSpeedLimit( aMapNaviTrafficFacilityInfo.getLimitSpeed() );
|
||||
traffic.setTrafficType( aMapNaviTrafficFacilityInfo.getBroadcastType() );
|
||||
traffic.setLat( aMapNaviTrafficFacilityInfo.latitude );
|
||||
traffic.setLon( aMapNaviTrafficFacilityInfo.longitude );
|
||||
return traffic;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,21 +12,42 @@ import android.os.Parcelable;
|
||||
public class MogoLatLng implements Parcelable {
|
||||
|
||||
public final double lat;
|
||||
@Deprecated
|
||||
public final double lng;
|
||||
public final double lon;
|
||||
|
||||
public MogoLatLng( double lat, double lng ) {
|
||||
public MogoLatLng( double lat, double lon ) {
|
||||
this.lat = lat;
|
||||
this.lng = lng;
|
||||
this.lng = lon;
|
||||
this.lon = lng;
|
||||
}
|
||||
|
||||
public double getLat() {
|
||||
return lat;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deprecated, use {@link #getLon()} instead.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Deprecated
|
||||
public double getLng() {
|
||||
return lng;
|
||||
}
|
||||
|
||||
public double getLon() {
|
||||
return lon;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "MogoLatLng{" +
|
||||
"lat=" + lat +
|
||||
", lon=" + lon +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
@@ -36,14 +57,16 @@ public class MogoLatLng implements Parcelable {
|
||||
public void writeToParcel( Parcel dest, int flags ) {
|
||||
dest.writeDouble( this.lat );
|
||||
dest.writeDouble( this.lng );
|
||||
dest.writeDouble( this.lon );
|
||||
}
|
||||
|
||||
protected MogoLatLng( Parcel in ) {
|
||||
this.lat = in.readDouble();
|
||||
this.lng = in.readDouble();
|
||||
this.lon = in.readDouble();
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator< MogoLatLng > CREATOR = new Parcelable.Creator< MogoLatLng >() {
|
||||
public static final Creator< MogoLatLng > CREATOR = new Creator< MogoLatLng >() {
|
||||
@Override
|
||||
public MogoLatLng createFromParcel( Parcel source ) {
|
||||
return new MogoLatLng( source );
|
||||
@@ -54,12 +77,4 @@ public class MogoLatLng implements Parcelable {
|
||||
return new MogoLatLng[size];
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "MogoLatLng{" +
|
||||
"lat=" + lat +
|
||||
", lng=" + lng +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.mogo.map.listener;
|
||||
|
||||
import com.mogo.map.marker.IMogoMarkerClickListener;
|
||||
import com.mogo.map.marker.MogoMarkersHandler;
|
||||
import com.mogo.map.navi.IMogoAimlessModeListener;
|
||||
import com.mogo.map.navi.IMogoNaviListener;
|
||||
import com.mogo.map.navi.MogoNaviListenerHandler;
|
||||
|
||||
@@ -63,4 +64,14 @@ public class MogoHosListenerRegister implements IMogoHosListenerRegister {
|
||||
public void unregisterMarkerClickListener() {
|
||||
MogoMarkersHandler.getInstance().unregisterMarkerClickListener();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerHostAimlessModeListener( IMogoAimlessModeListener listener ) {
|
||||
MogoNaviListenerHandler.getInstance().registerHostAimlessModeListener( listener );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterHostAimlessModeListener() {
|
||||
MogoNaviListenerHandler.getInstance().unregisterHostAimlessModeListener();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.mogo.map.navi;
|
||||
|
||||
/**
|
||||
* @author congtaowang
|
||||
* @since 2020-03-09
|
||||
* <p>
|
||||
* 续航模式回调
|
||||
*/
|
||||
public interface IMogoAimlessModeListener {
|
||||
|
||||
/**
|
||||
* 巡航信息发生改变
|
||||
*/
|
||||
void onUpdateTraffic2( MogoTraffic traffic );
|
||||
|
||||
/**
|
||||
* 拥堵信息
|
||||
*
|
||||
* @param info
|
||||
*/
|
||||
void onUpdateCongestion( MogoCongestionInfo info );
|
||||
}
|
||||
@@ -47,6 +47,8 @@ public interface IMogoNaviListener {
|
||||
|
||||
/**
|
||||
* 巡航信息发生改变
|
||||
* Deprecated, use {@link IMogoAimlessModeListener#onUpdateTraffic2(MogoTraffic)} instead.
|
||||
*/
|
||||
void onUpdateTraffic(MogoTraffic traffic);
|
||||
@Deprecated
|
||||
void onUpdateTraffic( MogoTraffic traffic );
|
||||
}
|
||||
|
||||
@@ -15,8 +15,20 @@ public interface IMogoNaviListenerRegister {
|
||||
*/
|
||||
void registerHostNaviListener( IMogoNaviListener listener );
|
||||
|
||||
/**
|
||||
* 注册巡航模式回调,各业务模块不用关注
|
||||
*
|
||||
* @param listener
|
||||
*/
|
||||
void registerHostAimlessModeListener( IMogoAimlessModeListener listener );
|
||||
|
||||
/**
|
||||
* 注销导航回调,各业务模块不用关注
|
||||
*/
|
||||
void unregisterHostNaviListener();
|
||||
|
||||
/**
|
||||
* 注销巡航回调,各业务模块不用关注
|
||||
*/
|
||||
void unregisterHostAimlessModeListener();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
package com.mogo.map.navi;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author congtaowang
|
||||
* @since 2020-03-09
|
||||
* <p>
|
||||
* 拥堵详情
|
||||
*/
|
||||
public class MogoCongestionInfo implements Parcelable {
|
||||
|
||||
private int mTime;
|
||||
private int mLength;
|
||||
private String mRoadName;
|
||||
private int mCongestionStatus;
|
||||
private int mEventType;
|
||||
private double mEventLon;
|
||||
private double mEventLat;
|
||||
|
||||
private List< MogoCongestionLink > mCongestionLinks;
|
||||
|
||||
|
||||
public MogoCongestionInfo() {
|
||||
}
|
||||
|
||||
public int getTime() {
|
||||
return mTime;
|
||||
}
|
||||
|
||||
public void setTime( int mTime ) {
|
||||
this.mTime = mTime;
|
||||
}
|
||||
|
||||
public int getLength() {
|
||||
return mLength;
|
||||
}
|
||||
|
||||
public void setLength( int mLength ) {
|
||||
this.mLength = mLength;
|
||||
}
|
||||
|
||||
public String getRoadName() {
|
||||
return mRoadName;
|
||||
}
|
||||
|
||||
public void setRoadName( String mRoadName ) {
|
||||
this.mRoadName = mRoadName;
|
||||
}
|
||||
|
||||
public int getCongestionStatus() {
|
||||
return mCongestionStatus;
|
||||
}
|
||||
|
||||
public void setCongestionStatus( int mCongestionStatus ) {
|
||||
this.mCongestionStatus = mCongestionStatus;
|
||||
}
|
||||
|
||||
public int getEventType() {
|
||||
return mEventType;
|
||||
}
|
||||
|
||||
public void setEventType( int mEventType ) {
|
||||
this.mEventType = mEventType;
|
||||
}
|
||||
|
||||
public double getEventLon() {
|
||||
return mEventLon;
|
||||
}
|
||||
|
||||
public void setEventLon( double mEventLon ) {
|
||||
this.mEventLon = mEventLon;
|
||||
}
|
||||
|
||||
public double getEventLat() {
|
||||
return mEventLat;
|
||||
}
|
||||
|
||||
public void setEventLat( double mEventLat ) {
|
||||
this.mEventLat = mEventLat;
|
||||
}
|
||||
|
||||
public List< MogoCongestionLink > getCongestionLinks() {
|
||||
return mCongestionLinks;
|
||||
}
|
||||
|
||||
public void setCongestionLinks( List< MogoCongestionLink > mCongestionLinks ) {
|
||||
this.mCongestionLinks = mCongestionLinks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel( Parcel dest, int flags ) {
|
||||
dest.writeInt( this.mTime );
|
||||
dest.writeInt( this.mLength );
|
||||
dest.writeString( this.mRoadName );
|
||||
dest.writeInt( this.mCongestionStatus );
|
||||
dest.writeInt( this.mEventType );
|
||||
dest.writeDouble( this.mEventLon );
|
||||
dest.writeDouble( this.mEventLat );
|
||||
dest.writeTypedList( this.mCongestionLinks );
|
||||
}
|
||||
|
||||
protected MogoCongestionInfo( Parcel in ) {
|
||||
this.mTime = in.readInt();
|
||||
this.mLength = in.readInt();
|
||||
this.mRoadName = in.readString();
|
||||
this.mCongestionStatus = in.readInt();
|
||||
this.mEventType = in.readInt();
|
||||
this.mEventLon = in.readDouble();
|
||||
this.mEventLat = in.readDouble();
|
||||
this.mCongestionLinks = in.createTypedArrayList( MogoCongestionLink.CREATOR );
|
||||
}
|
||||
|
||||
public static final Creator< MogoCongestionInfo > CREATOR = new Creator< MogoCongestionInfo >() {
|
||||
@Override
|
||||
public MogoCongestionInfo createFromParcel( Parcel source ) {
|
||||
return new MogoCongestionInfo( source );
|
||||
}
|
||||
|
||||
@Override
|
||||
public MogoCongestionInfo[] newArray( int size ) {
|
||||
return new MogoCongestionInfo[size];
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package com.mogo.map.navi;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import com.mogo.map.MogoLatLng;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author congtaowang
|
||||
* @since 2020-03-09
|
||||
* <p>
|
||||
* 描述
|
||||
*/
|
||||
public class MogoCongestionLink implements Parcelable {
|
||||
|
||||
private ArrayList< MogoLatLng > mCoords;
|
||||
private int mCongestionStatus;
|
||||
|
||||
|
||||
public MogoCongestionLink() {
|
||||
}
|
||||
|
||||
public List< MogoLatLng > getCoords() {
|
||||
return mCoords;
|
||||
}
|
||||
|
||||
public void setCoords( ArrayList< MogoLatLng > mCoords ) {
|
||||
this.mCoords = mCoords;
|
||||
}
|
||||
|
||||
public int getCongestionStatus() {
|
||||
return mCongestionStatus;
|
||||
}
|
||||
|
||||
public void setCongestionStatus( int mCongestionStatus ) {
|
||||
this.mCongestionStatus = mCongestionStatus;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel( Parcel dest, int flags ) {
|
||||
dest.writeTypedList( this.mCoords );
|
||||
dest.writeInt( this.mCongestionStatus );
|
||||
}
|
||||
|
||||
protected MogoCongestionLink( Parcel in ) {
|
||||
this.mCoords = in.createTypedArrayList( MogoLatLng.CREATOR );
|
||||
this.mCongestionStatus = in.readInt();
|
||||
}
|
||||
|
||||
public static final Creator< MogoCongestionLink > CREATOR = new Creator< MogoCongestionLink >() {
|
||||
@Override
|
||||
public MogoCongestionLink createFromParcel( Parcel source ) {
|
||||
return new MogoCongestionLink( source );
|
||||
}
|
||||
|
||||
@Override
|
||||
public MogoCongestionLink[] newArray( int size ) {
|
||||
return new MogoCongestionLink[size];
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -6,7 +6,7 @@ package com.mogo.map.navi;
|
||||
* <p>
|
||||
* 地图监听注册管理
|
||||
*/
|
||||
public class MogoNaviListenerHandler implements IMogoNaviListener, IMogoNaviListenerRegister {
|
||||
public class MogoNaviListenerHandler implements IMogoNaviListener, IMogoNaviListenerRegister, IMogoAimlessModeListener {
|
||||
|
||||
private static volatile MogoNaviListenerHandler sInstance;
|
||||
|
||||
@@ -33,6 +33,11 @@ public class MogoNaviListenerHandler implements IMogoNaviListener, IMogoNaviList
|
||||
*/
|
||||
private IMogoNaviListener mDelegateListener = null;
|
||||
|
||||
/**
|
||||
* 上层模块代理对象
|
||||
*/
|
||||
private IMogoAimlessModeListener mAimlessDelegateListener = null;
|
||||
|
||||
@Override
|
||||
public void registerHostNaviListener( IMogoNaviListener listener ) {
|
||||
mDelegateListener = listener;
|
||||
@@ -43,6 +48,16 @@ public class MogoNaviListenerHandler implements IMogoNaviListener, IMogoNaviList
|
||||
mDelegateListener = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerHostAimlessModeListener( IMogoAimlessModeListener listener ) {
|
||||
mAimlessDelegateListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterHostAimlessModeListener() {
|
||||
mAimlessDelegateListener = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void onInitNaviFailure() {
|
||||
if ( mDelegateListener != null ) {
|
||||
@@ -93,9 +108,24 @@ public class MogoNaviListenerHandler implements IMogoNaviListener, IMogoNaviList
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public void onUpdateTraffic( MogoTraffic traffic ) {
|
||||
if ( mDelegateListener != null ) {
|
||||
mDelegateListener.onUpdateTraffic( traffic );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateTraffic2( MogoTraffic traffic ) {
|
||||
if ( mAimlessDelegateListener != null ) {
|
||||
mAimlessDelegateListener.onUpdateTraffic2( traffic );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateCongestion( MogoCongestionInfo info ) {
|
||||
if ( mAimlessDelegateListener != null ) {
|
||||
mAimlessDelegateListener.onUpdateCongestion( info );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.mogo.map.navi;
|
||||
|
||||
import com.mogo.map.MogoLatLng;
|
||||
|
||||
/**
|
||||
* @author congtaowang
|
||||
* @since 2020-01-16
|
||||
@@ -34,9 +36,65 @@ public class MogoTraffic {
|
||||
private int mSpeedLimit;
|
||||
|
||||
/**
|
||||
* 描述
|
||||
* 经度
|
||||
*/
|
||||
private String mDesc;
|
||||
private double mLon;
|
||||
|
||||
/**
|
||||
* 维度
|
||||
*/
|
||||
private double mLat;
|
||||
|
||||
/**
|
||||
* 交通类型
|
||||
* 0 未知道路设施
|
||||
* 4 测速摄像头、测速雷达
|
||||
* 5 违章摄像头
|
||||
* 10 请谨慎驾驶
|
||||
* 11 有连续拍照
|
||||
* 12 铁路道口
|
||||
* 13 注意落石(左侧)
|
||||
* 14 事故易发地段
|
||||
* 15 易滑
|
||||
* 16 村庄
|
||||
* 18 前方学校
|
||||
* 19 有人看管的铁路道口
|
||||
* 20 无人看管的铁路道口
|
||||
* 21 两侧变窄
|
||||
* 22 向左急弯路
|
||||
* 23 向右急弯路
|
||||
* 24 反向弯路
|
||||
* 25 连续弯路
|
||||
* 26 左侧合流标识牌
|
||||
* 27 右侧合流标识牌
|
||||
* 28 监控摄像头
|
||||
* 29 专用道摄像头
|
||||
* 31 禁止超车
|
||||
* 36 右侧变窄
|
||||
* 37 左侧变窄
|
||||
* 38 窄桥
|
||||
* 39 左右绕行
|
||||
* 40 左侧绕行
|
||||
* 41 右侧绕行
|
||||
* 42 注意落石(右侧)
|
||||
* 43 傍山险路(左侧)
|
||||
* 44 傍山险路(右侧)
|
||||
* 47 上陡坡
|
||||
* 48 下陡坡
|
||||
* 49 过水路面
|
||||
* 50 路面不平
|
||||
* 52 慢行
|
||||
* 53 注意危险
|
||||
* 58 隧道
|
||||
* 59 渡口
|
||||
* 92 闯红灯
|
||||
* 93 应急车道
|
||||
* 94 非机动车道
|
||||
* 100 不绑定电子眼高发地
|
||||
* 101 车道违章
|
||||
* 102 超速违章
|
||||
*/
|
||||
private int mTrafficType;
|
||||
|
||||
public MogoTraffic( int fromType ) {
|
||||
mFromType = fromType;
|
||||
@@ -67,10 +125,124 @@ public class MogoTraffic {
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return mDesc;
|
||||
switch ( getTrafficType() ) {
|
||||
case 0:
|
||||
default:
|
||||
return "未知道路设施";
|
||||
case 4:
|
||||
return "测速摄像头、测速雷达";
|
||||
case 5:
|
||||
return "违章摄像头";
|
||||
case 10:
|
||||
return "请谨慎驾驶";
|
||||
case 11:
|
||||
return "有连续拍照";
|
||||
case 12:
|
||||
return "铁路道口";
|
||||
case 13:
|
||||
return "注意落石(左侧)";
|
||||
case 14:
|
||||
return "事故易发地段";
|
||||
case 15:
|
||||
return "易滑";
|
||||
case 16:
|
||||
return "村庄";
|
||||
case 18:
|
||||
return "前方学校";
|
||||
case 19:
|
||||
return "有人看管的铁路道口";
|
||||
case 20:
|
||||
return "无人看管的铁路道口";
|
||||
case 21:
|
||||
return "两侧变窄";
|
||||
case 22:
|
||||
return "向左急弯路";
|
||||
case 23:
|
||||
return "向右急弯路";
|
||||
case 24:
|
||||
return "反向弯路";
|
||||
case 25:
|
||||
return "连续弯路";
|
||||
case 26:
|
||||
return "左侧合流标识牌";
|
||||
case 27:
|
||||
return "右侧合流标识牌";
|
||||
case 28:
|
||||
return "监控摄像头";
|
||||
case 29:
|
||||
return "专用道摄像头";
|
||||
case 31:
|
||||
return "禁止超车";
|
||||
case 36:
|
||||
return "右侧变窄";
|
||||
case 37:
|
||||
return "左侧变窄";
|
||||
case 38:
|
||||
return "窄桥";
|
||||
case 39:
|
||||
return "左右绕行";
|
||||
case 40:
|
||||
return "左侧绕行";
|
||||
case 41:
|
||||
return "右侧绕行";
|
||||
case 42:
|
||||
return "注意落石(右侧)";
|
||||
case 43:
|
||||
return "傍山险路(左侧)";
|
||||
case 44:
|
||||
return "傍山险路(右侧)";
|
||||
case 47:
|
||||
return "上陡坡";
|
||||
case 48:
|
||||
return "下陡坡";
|
||||
case 49:
|
||||
return "过水路面";
|
||||
case 50:
|
||||
return "路面不平";
|
||||
case 52:
|
||||
return "慢行";
|
||||
case 53:
|
||||
return "注意危险";
|
||||
case 58:
|
||||
return "隧道";
|
||||
case 59:
|
||||
return "渡口";
|
||||
case 92:
|
||||
return "闯红灯";
|
||||
case 93:
|
||||
return "应急车道";
|
||||
case 94:
|
||||
return "非机动车道";
|
||||
case 100:
|
||||
return "不绑定电子眼高发地";
|
||||
case 101:
|
||||
return "车道违章";
|
||||
case 102:
|
||||
return "超速违章";
|
||||
}
|
||||
}
|
||||
|
||||
public void setDesc( String desc ) {
|
||||
this.mDesc = desc;
|
||||
public double getLon() {
|
||||
return mLon;
|
||||
}
|
||||
|
||||
public void setLon( double lon ) {
|
||||
this.mLon = lon;
|
||||
}
|
||||
|
||||
public double getLat() {
|
||||
return mLat;
|
||||
}
|
||||
|
||||
public void setLat( double lat ) {
|
||||
this.mLat = lat;
|
||||
}
|
||||
|
||||
public int getTrafficType() {
|
||||
return mTrafficType;
|
||||
}
|
||||
|
||||
public void setTrafficType( int trafficType ) {
|
||||
this.mTrafficType = trafficType;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,10 +54,15 @@ public interface IMogoMapUIController {
|
||||
void showMyLocation(boolean visible);
|
||||
|
||||
/**
|
||||
* 解锁锁车
|
||||
* 锁车
|
||||
*/
|
||||
void recoverLockMode();
|
||||
|
||||
/**
|
||||
* 解锁锁车
|
||||
*/
|
||||
void loseLockMode();
|
||||
|
||||
/**
|
||||
* 设置锁车缩放级别
|
||||
*
|
||||
@@ -132,13 +137,24 @@ public interface IMogoMapUIController {
|
||||
void setRenderFps(int fps);
|
||||
|
||||
/**
|
||||
* @param lonLats 经纬度围成的范围
|
||||
* @param bound 地图上可显示的范围
|
||||
* @param tag 调用业务
|
||||
* @param carPosition 当前位置
|
||||
* @param lonLats 经纬度围成的范围
|
||||
* @param bound 地图上可显示的范围
|
||||
* @param lockCarPosition 是否锁定车辆位置
|
||||
*/
|
||||
void showBounds(List<MogoLatLng> lonLats, Rect bound);
|
||||
void showBounds( String tag, MogoLatLng carPosition, List< MogoLatLng > lonLats, Rect bound, boolean lockCarPosition );
|
||||
|
||||
/**
|
||||
* 强制刷新地图
|
||||
*/
|
||||
void forceRender();
|
||||
|
||||
/**
|
||||
* 计算两点之间的距离
|
||||
* @param p1
|
||||
* @param p2
|
||||
* @return
|
||||
*/
|
||||
float calculateLineDistance(MogoLatLng p1, MogoLatLng p2) throws Exception;
|
||||
}
|
||||
|
||||
@@ -92,6 +92,13 @@ public class MogoMapUIController implements IMogoMapUIController {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loseLockMode() {
|
||||
if ( mDelegate != null ) {
|
||||
mDelegate.loseLockMode();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLockZoom(int var1) {
|
||||
if (mDelegate != null) {
|
||||
@@ -183,9 +190,9 @@ public class MogoMapUIController implements IMogoMapUIController {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showBounds( List< MogoLatLng > lonLats, Rect bound ) {
|
||||
public void showBounds(String tag, MogoLatLng carPosition, List< MogoLatLng > lonLats, Rect bound, boolean lockCarPosition ) {
|
||||
if ( mDelegate != null ) {
|
||||
mDelegate.showBounds( lonLats, bound );
|
||||
mDelegate.showBounds( tag, carPosition, lonLats, bound, lockCarPosition );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,4 +202,12 @@ public class MogoMapUIController implements IMogoMapUIController {
|
||||
mDelegate.forceRender();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public float calculateLineDistance( MogoLatLng p1, MogoLatLng p2 ) throws Exception {
|
||||
if ( mDelegate != null ) {
|
||||
return mDelegate.calculateLineDistance( p1, p2 );
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
5
map-upload.sh
Executable file
5
map-upload.sh
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
./gradlew :libraries:mogo-map-api:clean :libraries:mogo-map-api:uploadArchives
|
||||
./gradlew :libraries:map-amap:clean :libraries:map-amap:uploadArchives
|
||||
./gradlew :libraries:mogo-map:clean :libraries:mogo-map:uploadArchives
|
||||
@@ -34,7 +34,6 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi
|
||||
private View mCarSettings;
|
||||
private View mApps;
|
||||
|
||||
private AppsFragment mAppsFragment;
|
||||
private IMogoFragmentManager mMogoFragmentManager;
|
||||
|
||||
/**
|
||||
|
||||
@@ -7,6 +7,7 @@ import androidx.lifecycle.LifecycleOwner;
|
||||
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.mogo.commons.mvp.Presenter;
|
||||
import com.mogo.module.apps.model.AppsModel;
|
||||
import com.mogo.module.apps.utils.LaunchUtils;
|
||||
import com.mogo.service.MogoServicePaths;
|
||||
import com.mogo.service.intent.IMogoIntentListener;
|
||||
@@ -39,6 +40,8 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme
|
||||
super.onCreate( owner );
|
||||
mIntentManager = ( IMogoIntentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_INTENT_MANAGER ).navigation( getContext() );
|
||||
mMogoStatusManager = ( IMogoStatusManager ) ARouter.getInstance().build( MogoServicePaths.PATH_STATUS_MANAGER ).navigation( getContext() );
|
||||
// 预加载应用列表,空间换时间
|
||||
AppsModel.getInstance(getContext()).load( null );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -57,7 +57,7 @@ public class AppsAdapter extends BaseAdapter {
|
||||
}
|
||||
AppInfo appInfo = getItem( position );
|
||||
if ( appInfo.getIconResId() <= 0 ) {
|
||||
holder.mIcon.setImageDrawable( appInfo.getIcon() );
|
||||
holder.mIcon.setImageResource( R.drawable.module_apps_ic_default_icon );
|
||||
} else {
|
||||
holder.mIcon.setImageResource( appInfo.getIconResId() );
|
||||
}
|
||||
|
||||
@@ -16,68 +16,70 @@ import com.mogo.module.apps.R;
|
||||
public enum AppEnum {
|
||||
|
||||
//"QQ音乐",
|
||||
QQMusic( "com.pvetec.musics", R.drawable.module_apps_ic_qq_music ),
|
||||
QQMusic( "QQ音乐","com.pvetec.musics", R.drawable.module_apps_ic_qq_music ),
|
||||
|
||||
//"车聊聊",
|
||||
Im( "com.zhidao.imdemo", R.drawable.module_apps_ic_im ),
|
||||
Im( "车聊聊","com.zhidao.imdemo", R.drawable.module_apps_ic_im ),
|
||||
|
||||
//"探路",
|
||||
RoadCondition( "com.zhidao.roadcondition", R.drawable.module_apps_ic_road_condition ),
|
||||
RoadConditionSlit( "com.zhidao.roadcondition.split", R.drawable.module_apps_ic_road_condition ),
|
||||
RoadCondition( "探路","com.zhidao.roadcondition", R.drawable.module_apps_ic_road_condition ),
|
||||
RoadConditionSlit( "探路","com.zhidao.roadcondition.split", R.drawable.module_apps_ic_road_condition ),
|
||||
|
||||
//"福利",
|
||||
Welfare( "com.zhidaohulian.welfare.car", R.drawable.module_apps_ic_welfare ),
|
||||
Welfare( "福利","com.zhidaohulian.welfare.car", R.drawable.module_apps_ic_welfare ),
|
||||
|
||||
//"蘑菇小队",
|
||||
Fleet( "com.zhidao.fleet", R.drawable.module_apps_ic_fleet ),
|
||||
Fleet( "蘑菇小队","com.zhidao.fleet", R.drawable.module_apps_ic_fleet ),
|
||||
|
||||
//"行车记录仪",
|
||||
CarCorder( "com.zhidao.carcorder", R.drawable.module_apps_ic_carcorder ),
|
||||
CarCorder( "行车记录仪","com.zhidao.carcorder", R.drawable.module_apps_ic_carcorder ),
|
||||
|
||||
//"懒人听书",
|
||||
Lrts( "com.zhidao.lrts", R.drawable.module_apps_ic_lrts ),
|
||||
Lrts( "懒人听书","com.zhidao.lrts", R.drawable.module_apps_ic_lrts ),
|
||||
|
||||
//"一键清理",
|
||||
CleanMaster( "com.zhidao.cleanmaster", R.drawable.module_apps_ic_clean_master ),
|
||||
CleanMaster( "一键清理","com.zhidao.cleanmaster", R.drawable.module_apps_ic_clean_master ),
|
||||
|
||||
//"系统升级",
|
||||
Fota( "com.abupdate.fota_demo_iot", R.drawable.module_apps_ic_fota ),
|
||||
Fota( "系统升级","com.abupdate.fota_demo_iot", R.drawable.module_apps_ic_fota ),
|
||||
|
||||
//"微信车机助手",
|
||||
WechatHelper( "com.zhidao.wechathelper", R.drawable.module_apps_ic_wechat ),
|
||||
WechatHelper( "微信车机助手","com.zhidao.wechathelper", R.drawable.module_apps_ic_wechat ),
|
||||
|
||||
//"爱奇艺HD",
|
||||
Qiyi( "com.qiyi.video.pad", R.drawable.module_apps_ic_qiyi ),
|
||||
Qiyi( "爱奇艺HD","com.qiyi.video.pad", R.drawable.module_apps_ic_qiyi ),
|
||||
|
||||
//"喜马拉雅",
|
||||
Ximalaya( "com.ximalaya.ting.android.car", R.drawable.module_apps_ic_ximalaya ),
|
||||
Ximalaya( "喜马拉雅","com.ximalaya.ting.android.car", R.drawable.module_apps_ic_ximalaya ),
|
||||
|
||||
//"均衡器",
|
||||
Equlizer( "com.zhidao.equalizer", R.drawable.module_apps_ic_equlizer ),
|
||||
Equlizer( "均衡器","com.zhidao.equalizer", R.drawable.module_apps_ic_equlizer ),
|
||||
|
||||
//"方控学习",
|
||||
SteerProduct( "com.zd.steerproduct", R.drawable.module_apps_ic_stee_product ),
|
||||
SteerProduct( "方控学习","com.zd.steerproduct", R.drawable.module_apps_ic_stee_product ),
|
||||
|
||||
//"蓝牙音乐",
|
||||
BTMusic( "com.nwd.bt.music", R.drawable.module_apps_ic_bt ),
|
||||
BTMusic( "蓝牙音乐","com.nwd.bt.music", R.drawable.module_apps_ic_bt ),
|
||||
|
||||
//"车载设置",
|
||||
CarSettings( "com.zhidao.settings", R.drawable.module_apps_ic_car_setting ),
|
||||
CarSettings( "车载设置","com.zhidao.settings", R.drawable.module_apps_ic_car_setting ),
|
||||
|
||||
//"AUX",
|
||||
AUX( "com.nwd.auxin", R.drawable.module_apps_ic_aux ),
|
||||
AUX( "AUX","com.nwd.auxin", R.drawable.module_apps_ic_aux ),
|
||||
|
||||
//FM
|
||||
FM( " com.nwd.radio", R.drawable.module_apps_ic_fm ),
|
||||
FM( "FM","com.nwd.radio", R.drawable.module_apps_ic_fm ),
|
||||
|
||||
// 新鲜事
|
||||
FreshThings( "com.zhidao.fresh.things", R.drawable.module_apps_ic_fresh_things ),
|
||||
FreshThings( "新鲜事","com.zhidao.fresh.things", R.drawable.module_apps_ic_fresh_things ),
|
||||
;
|
||||
|
||||
private String mName;
|
||||
private String mPkg;
|
||||
private int mIconResId;
|
||||
|
||||
AppEnum( String pkg, int iconResId ) {
|
||||
AppEnum( String name, String pkg, int iconResId ) {
|
||||
this.mName = name;
|
||||
this.mPkg = pkg;
|
||||
this.mIconResId = iconResId;
|
||||
}
|
||||
@@ -89,4 +91,8 @@ public enum AppEnum {
|
||||
public int getIconResId() {
|
||||
return mIconResId;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return mName;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,4 +31,12 @@ public class AppEnumHelper {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static String getTargetName(String pkg){
|
||||
AppEnum appEnum = sCustomizedApps.get( pkg );
|
||||
if ( appEnum != null ) {
|
||||
return appEnum.getName();
|
||||
}
|
||||
return pkg;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,12 +74,13 @@ public class AppsModel {
|
||||
if ( !mPagedApps.containsKey( page ) ) {
|
||||
mPagedApps.put( page, new ArrayList<>() );
|
||||
}
|
||||
String appName = packageInfo.applicationInfo.loadLabel( packageManager ).toString();
|
||||
String appName = getApplicationName( packageManager, packageInfo );
|
||||
String packageName = packageInfo.packageName;
|
||||
String versionName = packageInfo.versionName;
|
||||
int versionCode = packageInfo.versionCode;
|
||||
Drawable appIcon = packageInfo.applicationInfo.loadIcon( packageManager );
|
||||
AppInfo appInfo = new AppInfo( appName, packageName, versionName, versionCode, appIcon, AppEnumHelper.getCustomizedAppIconResId( packageName ) );
|
||||
// 不加载默认图标,避免不必要的开销,因为现在应用列表图标都是定制的啊~~~~
|
||||
// Drawable appIcon = packageInfo.applicationInfo.loadIcon( packageManager );
|
||||
AppInfo appInfo = new AppInfo( appName, packageName, versionName, versionCode, null, AppEnumHelper.getCustomizedAppIconResId( packageName ) );
|
||||
mPagedApps.get( page ).add( appInfo );
|
||||
}
|
||||
if ( callback != null ) {
|
||||
@@ -102,7 +103,7 @@ public class AppsModel {
|
||||
final PackageManager packageManager = mContext.getPackageManager();
|
||||
PackageInfo packageInfo = packageManager.getPackageInfo( packageName, 0 );
|
||||
if ( !mAppFilter.filter( packageInfo ) ) {
|
||||
String appName = packageInfo.applicationInfo.loadLabel( packageManager ).toString();
|
||||
String appName = getApplicationName( packageManager, packageInfo );
|
||||
String versionName = packageInfo.versionName;
|
||||
int versionCode = packageInfo.versionCode;
|
||||
Drawable appIcon = packageInfo.applicationInfo.loadIcon( packageManager );
|
||||
@@ -119,6 +120,14 @@ public class AppsModel {
|
||||
}
|
||||
}
|
||||
|
||||
private String getApplicationName( PackageManager packageManager, PackageInfo packageInfo ) {
|
||||
String name = packageManager.getApplicationLabel( packageInfo.applicationInfo ).toString();
|
||||
if ( name.startsWith( "com." ) || name.split( "." ).length > 3 ) {
|
||||
return AppEnumHelper.getTargetName( packageInfo.packageName );
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
private int getPageIndex( String packageName, boolean add ) {
|
||||
int totalPages = mPagedApps.size();
|
||||
if ( add ) {
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.4 KiB |
@@ -132,15 +132,14 @@ public class EntranceFragment extends MvpFragment<EntranceView, EntrancePresente
|
||||
mMogoAddressManager.goCompany();
|
||||
});
|
||||
|
||||
mUploadRoadCondition = findViewById(R.id.module_entrance_id_upload_road_condition);
|
||||
mUploadRoadCondition.setOnClickListener(view -> {
|
||||
ShareControl.getInstance(getActivity()).showDialog();
|
||||
traceData("1");
|
||||
});
|
||||
|
||||
mVRMode = findViewById(R.id.module_entrance_id_vr_mode);
|
||||
mVRMode.setOnClickListener(view -> {
|
||||
});
|
||||
mUploadRoadCondition = findViewById( R.id.module_entrance_id_upload_road_condition );
|
||||
mUploadRoadCondition.setOnClickListener( view -> {
|
||||
ShareControl.getInstance( getActivity() ).showDialog();
|
||||
traceData( "1" );
|
||||
} );
|
||||
mVRMode = findViewById( R.id.module_entrance_id_vr_mode );
|
||||
mVRMode.setOnClickListener( view -> {
|
||||
} );
|
||||
|
||||
mMove2CurrentLocation = findViewById(R.id.module_entrance_id_move2_current_location);
|
||||
mMove2CurrentLocation.setOnClickListener(view -> {
|
||||
|
||||
@@ -12,7 +12,6 @@ import androidx.annotation.Nullable;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.mogo.commons.mvp.MvpActivity;
|
||||
import com.mogo.commons.voice.AIAssist;
|
||||
import com.mogo.map.location.IMogoLocationClient;
|
||||
@@ -33,6 +32,7 @@ import com.mogo.module.main.cards.VerticalStackTransformer;
|
||||
import com.mogo.module.main.constants.VoiceConstants;
|
||||
import com.mogo.module.main.windowview.WindowViewHandler;
|
||||
import com.mogo.module.service.ServiceConst;
|
||||
import com.mogo.service.IMogoServiceApis;
|
||||
import com.mogo.service.MogoServicePaths;
|
||||
import com.mogo.service.cardmanager.IMogoCardManager;
|
||||
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
|
||||
@@ -42,22 +42,24 @@ import com.mogo.service.map.IMogoMapService;
|
||||
import com.mogo.service.module.IMogoModuleProvider;
|
||||
import com.mogo.utils.logger.Logger;
|
||||
|
||||
import java.util.List;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author congtaowang
|
||||
* @since 2019-12-23
|
||||
* <p>
|
||||
* 描述:加载各个模块
|
||||
*/
|
||||
public class MainActivity extends MvpActivity<MainView, MainPresenter> implements MainView,
|
||||
IMogoLocationListener,
|
||||
IMogoMarkerClickListener, IMogoIntentListener {
|
||||
public class MainActivity extends MvpActivity< MainView, MainPresenter > implements MainView,
|
||||
IMogoLocationListener,
|
||||
IMogoMarkerClickListener, IMogoIntentListener {
|
||||
|
||||
private static final String TAG = "MainActivity";
|
||||
|
||||
private IMogoServiceApis mServiceApis;
|
||||
private IMogoMapService mMogoMapService;
|
||||
private IMogoMapUIController mMogoMapUIController;
|
||||
private MogoModulesHandler mMogoModuleHandler;
|
||||
@@ -95,110 +97,110 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
|
||||
|
||||
@Override
|
||||
protected void initViews() {
|
||||
mCardsContainer = findViewById(R.id.module_main_id_cards_container);
|
||||
mCardsContainer.setOrientation(OrientedViewPager.Orientation.VERTICAL);
|
||||
mTransformer = new VerticalStackTransformer(this);
|
||||
mCardsContainer = findViewById( R.id.module_main_id_cards_container );
|
||||
mCardsContainer.setOrientation( OrientedViewPager.Orientation.VERTICAL );
|
||||
mTransformer = new VerticalStackTransformer( this );
|
||||
mCardsContainer.setOnPageChangeListener(
|
||||
mOnPageChangeListener = new OnPageChangeListenerAdapter() {
|
||||
private boolean mIsLast = true;
|
||||
private boolean mCardFlipStatus = false;
|
||||
mOnPageChangeListener = new OnPageChangeListenerAdapter() {
|
||||
private boolean mIsLast = true;
|
||||
private boolean mCardFlipStatus = false;
|
||||
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
final long start = System.currentTimeMillis();
|
||||
try {
|
||||
IMogoModuleProvider provider =
|
||||
mCardModulesAdapter.getProvider(mCurrentPosition);
|
||||
mPresenter.postTrackLastCardShowEvent(provider);
|
||||
mCurrentPosition = position;
|
||||
provider = mCardModulesAdapter.getProvider(mCurrentPosition);
|
||||
mMogoModuleHandler.setModuleEnable(provider.getModuleName());
|
||||
mMogoCardManager.invoke(position,
|
||||
mMogoModuleHandler.getCurrentModuleName());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Logger.i(TAG,
|
||||
"onPageSelected cost " + (System.currentTimeMillis() - start) + "ms");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int state) {
|
||||
final long start = System.currentTimeMillis();
|
||||
super.onPageScrollStateChanged(state);
|
||||
if (state == ViewPager.SCROLL_STATE_DRAGGING) {
|
||||
if (!mCardFlipStatus) {
|
||||
mCardFlipStatus = true;
|
||||
final IMogoModuleProvider provider =
|
||||
mCardModulesAdapter.getProvider(mCurrentPosition);
|
||||
mPresenter.postTrackCardFlipEvent(provider);
|
||||
@Override
|
||||
public void onPageSelected( int position ) {
|
||||
final long start = System.currentTimeMillis();
|
||||
try {
|
||||
IMogoModuleProvider provider =
|
||||
mCardModulesAdapter.getProvider( mCurrentPosition );
|
||||
mPresenter.postTrackLastCardShowEvent( provider );
|
||||
mCurrentPosition = position;
|
||||
provider = mCardModulesAdapter.getProvider( mCurrentPosition );
|
||||
mMogoModuleHandler.setModuleEnable( provider.getModuleName() );
|
||||
mMogoCardManager.invoke( position,
|
||||
mMogoModuleHandler.getCurrentModuleName() );
|
||||
} catch ( Exception e ) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else if (state == ViewPager.SCROLL_STATE_IDLE) {
|
||||
mCardFlipStatus = false;
|
||||
mTransformer.resetOffsetScroll();
|
||||
Logger.i( TAG,
|
||||
"onPageSelected cost " + ( System.currentTimeMillis() - start ) + "ms" );
|
||||
}
|
||||
|
||||
int cardSize = mCardModulesAdapter.getCount();
|
||||
|
||||
if (state == ViewPager.SCROLL_STATE_SETTLING) {
|
||||
mIsLast = false;
|
||||
} else if (state == ViewPager.SCROLL_STATE_IDLE && mIsLast) {
|
||||
//此处为你需要的情况,再加入当前页码判断可知道是第一页还是最后一页
|
||||
if (cardSize != 1 && mCurrentPosition == (cardSize - 1)) {
|
||||
mCardsContainer.setCurrentItem(0, false);
|
||||
} else if (cardSize != 1 && mCurrentPosition == 0) {
|
||||
mCardsContainer.setCurrentItem(cardSize - 1, false);
|
||||
@Override
|
||||
public void onPageScrollStateChanged( int state ) {
|
||||
final long start = System.currentTimeMillis();
|
||||
super.onPageScrollStateChanged( state );
|
||||
if ( state == ViewPager.SCROLL_STATE_DRAGGING ) {
|
||||
if ( !mCardFlipStatus ) {
|
||||
mCardFlipStatus = true;
|
||||
final IMogoModuleProvider provider =
|
||||
mCardModulesAdapter.getProvider( mCurrentPosition );
|
||||
mPresenter.postTrackCardFlipEvent( provider );
|
||||
}
|
||||
} else if ( state == ViewPager.SCROLL_STATE_IDLE ) {
|
||||
mCardFlipStatus = false;
|
||||
mTransformer.resetOffsetScroll();
|
||||
}
|
||||
} else {
|
||||
mIsLast = true;
|
||||
|
||||
int cardSize = mCardModulesAdapter.getCount();
|
||||
|
||||
if ( state == ViewPager.SCROLL_STATE_SETTLING ) {
|
||||
mIsLast = false;
|
||||
} else if ( state == ViewPager.SCROLL_STATE_IDLE && mIsLast ) {
|
||||
//此处为你需要的情况,再加入当前页码判断可知道是第一页还是最后一页
|
||||
if ( cardSize != 1 && mCurrentPosition == ( cardSize - 1 ) ) {
|
||||
mCardsContainer.setCurrentItem( 0, false );
|
||||
} else if ( cardSize != 1 && mCurrentPosition == 0 ) {
|
||||
mCardsContainer.setCurrentItem( cardSize - 1, false );
|
||||
}
|
||||
} else {
|
||||
mIsLast = true;
|
||||
}
|
||||
Logger.i( TAG, "onPageScrollStateChanged cost "
|
||||
+ ( System.currentTimeMillis() - start )
|
||||
+ "ms" );
|
||||
}
|
||||
Logger.i(TAG, "onPageScrollStateChanged cost "
|
||||
+ (System.currentTimeMillis() - start)
|
||||
+ "ms");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrolled(int position, float positionOffset,
|
||||
int positionOffsetPixels) {
|
||||
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
|
||||
Logger.d(TAG, "pageScrolled : offset --- " + positionOffset);
|
||||
mTransformer.offsetScrollChanged(positionOffset);
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void onPageScrolled( int position, float positionOffset,
|
||||
int positionOffsetPixels ) {
|
||||
super.onPageScrolled( position, positionOffset, positionOffsetPixels );
|
||||
Logger.d( TAG, "pageScrolled : offset --- " + positionOffset );
|
||||
mTransformer.offsetScrollChanged( positionOffset );
|
||||
}
|
||||
} );
|
||||
|
||||
mHeader = findViewById(R.id.module_main_id_header_fragment_container);
|
||||
mCards = findViewById(R.id.module_main_id_cards_container);
|
||||
mApps = findViewById(R.id.module_main_id_apps_fragment_container);
|
||||
mEntrance = findViewById(R.id.module_main_id_entrance_fragment_container);
|
||||
mFloatingLayout = findViewById(R.id.module_main_id_floating_view);
|
||||
mLeftShadowFrame = findViewById(R.id.module_main_id_map_left_shadow_frame);
|
||||
mTopShadowFrame = findViewById(R.id.module_main_id_map_top_shadow_frame);
|
||||
mCoverUpLayout = findViewById(R.id.module_main_id_cover_up);
|
||||
mCardCoverUpBottomLayout = findViewById(R.id.module_main_id_card_cover_up_bottom);
|
||||
mHeader = findViewById( R.id.module_main_id_header_fragment_container );
|
||||
mCards = findViewById( R.id.module_main_id_cards_container );
|
||||
mApps = findViewById( R.id.module_main_id_apps_fragment_container );
|
||||
mEntrance = findViewById( R.id.module_main_id_entrance_fragment_container );
|
||||
mFloatingLayout = findViewById( R.id.module_main_id_floating_view );
|
||||
mLeftShadowFrame = findViewById( R.id.module_main_id_map_left_shadow_frame );
|
||||
mTopShadowFrame = findViewById( R.id.module_main_id_map_top_shadow_frame );
|
||||
mCoverUpLayout = findViewById( R.id.module_main_id_cover_up );
|
||||
mCardCoverUpBottomLayout = findViewById( R.id.module_main_id_card_cover_up_bottom );
|
||||
|
||||
WindowViewHandler.init(mFloatingLayout);
|
||||
WindowViewHandler.init( mFloatingLayout );
|
||||
}
|
||||
|
||||
// 隐藏布局
|
||||
private void hideLayout() {
|
||||
mHeader.setVisibility(View.GONE);
|
||||
mCards.setVisibility(View.GONE);
|
||||
mApps.setVisibility(View.GONE);
|
||||
mEntrance.setVisibility(View.GONE);
|
||||
mFloatingLayout.setVisibility(View.GONE);
|
||||
mLeftShadowFrame.setVisibility(View.GONE);
|
||||
mCardCoverUpBottomLayout.setVisibility(View.GONE);
|
||||
mHeader.setVisibility( View.GONE );
|
||||
mCards.setVisibility( View.GONE );
|
||||
mApps.setVisibility( View.GONE );
|
||||
mEntrance.setVisibility( View.GONE );
|
||||
mFloatingLayout.setVisibility( View.GONE );
|
||||
mLeftShadowFrame.setVisibility( View.GONE );
|
||||
mCardCoverUpBottomLayout.setVisibility( View.GONE );
|
||||
}
|
||||
|
||||
// 显示布局
|
||||
private void showLayout() {
|
||||
mHeader.setVisibility(View.VISIBLE);
|
||||
mCards.setVisibility(View.VISIBLE);
|
||||
mApps.setVisibility(View.VISIBLE);
|
||||
mEntrance.setVisibility(View.VISIBLE);
|
||||
mFloatingLayout.setVisibility(View.VISIBLE);
|
||||
mLeftShadowFrame.setVisibility(View.VISIBLE);
|
||||
mCardCoverUpBottomLayout.setVisibility(View.VISIBLE);
|
||||
mHeader.setVisibility( View.VISIBLE );
|
||||
mCards.setVisibility( View.VISIBLE );
|
||||
mApps.setVisibility( View.VISIBLE );
|
||||
mEntrance.setVisibility( View.VISIBLE );
|
||||
mFloatingLayout.setVisibility( View.VISIBLE );
|
||||
mLeftShadowFrame.setVisibility( View.VISIBLE );
|
||||
mCardCoverUpBottomLayout.setVisibility( View.VISIBLE );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -211,158 +213,157 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
|
||||
public void loadModules() {
|
||||
final long start = System.currentTimeMillis();
|
||||
|
||||
getWindow().setBackgroundDrawable( null );
|
||||
|
||||
mServiceApis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation();
|
||||
|
||||
MogoModulePaths.addModule( new MogoModule( ServiceConst.PATH_REFRESH_STRATEGY, ServiceConst.PATH_REFRESH_STRATEGY ) );
|
||||
|
||||
mMogoModuleHandler = new MogoModulesManager( this );
|
||||
mMogoMapService = ( IMogoMapService ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICES_MAP ).navigation();
|
||||
mMogoMapService = mServiceApis.getMapServiceApi();
|
||||
if ( mMogoMapService != null ) {
|
||||
mMogoMapService.getHostListenerRegister().registerHostMapListener( mMogoModuleHandler );
|
||||
mMogoMapService.getHostListenerRegister().registerHostNaviListener( mMogoModuleHandler );
|
||||
mMogoMapService.getHostListenerRegister().registerHostAimlessModeListener( mMogoModuleHandler );
|
||||
mMogoMapService.getHostListenerRegister().registerMarkerClickListener( this );
|
||||
}
|
||||
|
||||
mMogoModuleHandler.setMapLoadedCallback(() -> {
|
||||
Logger.d(TAG, "map loaded." + Thread.currentThread().getName());
|
||||
mMogoModuleHandler.setMapLoadedCallback( () -> {
|
||||
Logger.d( TAG, "map loaded." + Thread.currentThread().getName() );
|
||||
// 加载地图,触发地图加载完毕回调,在初始化其他卡片模块,保证卡片模块可以正确获取地图相关服务。
|
||||
loadContainerModules();
|
||||
mMogoModuleHandler.loadModules();
|
||||
mPresenter.delayOperations();
|
||||
|
||||
// 显示左边遮罩
|
||||
mLeftShadowFrame.setVisibility(View.VISIBLE);
|
||||
mTopShadowFrame.setVisibility(View.VISIBLE);
|
||||
mLeftShadowFrame.setVisibility( View.VISIBLE );
|
||||
mTopShadowFrame.setVisibility( View.VISIBLE );
|
||||
|
||||
// 右移地图中心点
|
||||
mMogoMapUIController = mMogoMapService.getMapUIController();
|
||||
mMogoMapUIController.setPointToCenter(0.66145, 0.590688);
|
||||
mMogoMapUIController.setPointToCenter( 0.66145, 0.590688 );
|
||||
|
||||
// 开启定位
|
||||
startLocation();
|
||||
});
|
||||
mMogoModuleHandler.loadMapModule(R.id.module_main_id_map_fragment_container);
|
||||
} );
|
||||
mMogoModuleHandler.loadMapModule( R.id.module_main_id_map_fragment_container );
|
||||
|
||||
mMogoCardManager = (IMogoCardManager) ARouter.getInstance()
|
||||
.build(MogoServicePaths.PATH_CARD_MANAGER)
|
||||
.navigation(this);
|
||||
mMogoCardManager = mServiceApis.getCardManagerApi();
|
||||
|
||||
mMogoFragmentManager = (IMogoFragmentManager) ARouter.getInstance()
|
||||
.build(MogoServicePaths.PATH_FRAGMENT_MANAGER)
|
||||
.navigation(this);
|
||||
mMogoFragmentManager.init(this, R.id.module_main_id_search_fragment);
|
||||
mMogoFragmentManager.registerMainFragmentStackTransactionListener((size) -> {
|
||||
if (size == 0) {
|
||||
mMogoFragmentManager = mServiceApis.getFragmentManagerApi();
|
||||
mMogoFragmentManager.init( this, R.id.module_main_id_search_fragment );
|
||||
mMogoFragmentManager.registerMainFragmentStackTransactionListener( ( size ) -> {
|
||||
if ( size == 0 ) {
|
||||
showLayout();
|
||||
} else if (size == 1) {
|
||||
} else if ( size == 1 ) {
|
||||
hideLayout();
|
||||
}
|
||||
});
|
||||
} );
|
||||
|
||||
mMogoIntentManager = (IMogoIntentManager) ARouter.getInstance()
|
||||
.build(MogoServicePaths.PATH_INTENT_MANAGER)
|
||||
.navigation(getContext());
|
||||
mMogoIntentManager = mServiceApis.getIntentManagerApi();
|
||||
registerVoiceCmd();
|
||||
Log.i("timer", "cost " + (System.currentTimeMillis() - start) + "ms");
|
||||
Log.i( "timer", "cost " + ( System.currentTimeMillis() - start ) + "ms" );
|
||||
}
|
||||
|
||||
private void registerVoiceCmd() {
|
||||
|
||||
for (String cmd : VoiceConstants.sCmds) {
|
||||
mMogoIntentManager.registerIntentListener(cmd, this);
|
||||
for ( String cmd : VoiceConstants.sCmds ) {
|
||||
mMogoIntentManager.registerIntentListener( cmd, this );
|
||||
}
|
||||
}
|
||||
|
||||
private void startLocation() {
|
||||
mLocationClient = mMogoMapService.getSingletonLocationClient(getApplicationContext());
|
||||
mLocationClient.addLocationListener(this);
|
||||
mLocationClient.start(2_000L);
|
||||
mLocationClient = mMogoMapService.getSingletonLocationClient( getApplicationContext() );
|
||||
mLocationClient.addLocationListener( this );
|
||||
mLocationClient.start( 2_000L );
|
||||
}
|
||||
|
||||
private void loadContainerModules() {
|
||||
mMogoModuleHandler.loadAppsListModule(R.id.module_main_id_apps_fragment_container);
|
||||
mMogoModuleHandler.loadExtensionsModule(R.id.module_main_id_header_fragment_container);
|
||||
mMogoModuleHandler.loadEntrancesModule(R.id.module_main_id_entrance_fragment_container);
|
||||
mMogoModuleHandler.loadAppsListModule( R.id.module_main_id_apps_fragment_container );
|
||||
mMogoModuleHandler.loadExtensionsModule( R.id.module_main_id_header_fragment_container );
|
||||
mMogoModuleHandler.loadEntrancesModule( R.id.module_main_id_entrance_fragment_container );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postPickFirstCardEvent() {
|
||||
if (mOnPageChangeListener != null) {
|
||||
if ( mOnPageChangeListener != null ) {
|
||||
// 默认触发第一个卡片
|
||||
mOnPageChangeListener.onPageSelected(0);
|
||||
mOnPageChangeListener.onPageSelected( 0 );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hideCoverUpLayout() {
|
||||
mCoverUpLayout.setVisibility(View.GONE);
|
||||
mCoverUpLayout.setVisibility( View.GONE );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadCardModules() {
|
||||
|
||||
List<IMogoModuleProvider> providers = mMogoModuleHandler.loadCardsModule();
|
||||
mCardModulesAdapter = new CardModulesAdapter(this, providers);
|
||||
mCardsContainer.setOffscreenPageLimit(providers.size());
|
||||
mCardsContainer.setPageTransformer(true, mTransformer);
|
||||
mCardsContainer.setAdapter(mCardModulesAdapter);
|
||||
List< IMogoModuleProvider > providers = mMogoModuleHandler.loadCardsModule();
|
||||
mCardModulesAdapter = new CardModulesAdapter( this, providers );
|
||||
mCardsContainer.setOffscreenPageLimit( providers.size() );
|
||||
mCardsContainer.setPageTransformer( true, mTransformer );
|
||||
mCardsContainer.setAdapter( mCardModulesAdapter );
|
||||
|
||||
mCardCoverUpBottomLayout.setVisibility(View.VISIBLE);
|
||||
mCardCoverUpBottomLayout.setVisibility( View.VISIBLE );
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected MainPresenter createPresenter() {
|
||||
return new MainPresenter(this);
|
||||
return new MainPresenter( this );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLocationChanged(MogoLocation location) {
|
||||
if (mMogoModuleHandler != null) {
|
||||
mMogoModuleHandler.onLocationChanged(location);
|
||||
public void onLocationChanged( MogoLocation location ) {
|
||||
if ( mMogoModuleHandler != null ) {
|
||||
mMogoModuleHandler.onLocationChanged( location );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMarkerClicked(IMogoMarker marker) {
|
||||
switch2Card(marker.getOwner());
|
||||
if (mMogoModuleHandler != null) {
|
||||
mMogoModuleHandler.onMarkerClicked(marker);
|
||||
public boolean onMarkerClicked( IMogoMarker marker ) {
|
||||
switch2Card( marker.getOwner() );
|
||||
if ( mMogoModuleHandler != null ) {
|
||||
mMogoModuleHandler.onMarkerClicked( marker );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void switch2Card(String cardType) {
|
||||
if (mCardModulesAdapter != null) {
|
||||
public void switch2Card( String cardType ) {
|
||||
if ( mCardModulesAdapter != null ) {
|
||||
|
||||
int position = mCardModulesAdapter.getProviderPosition(cardType);
|
||||
if (position != -1) {
|
||||
int lastFactPosition = mCardModulesAdapter.getFactPosition(mCurrentPosition);
|
||||
mCardsContainer.setCurrentItem(mCurrentPosition + position - lastFactPosition,
|
||||
Math.abs(lastFactPosition - position) == 1);
|
||||
int position = mCardModulesAdapter.getProviderPosition( cardType );
|
||||
if ( position != -1 ) {
|
||||
int lastFactPosition = mCardModulesAdapter.getFactPosition( mCurrentPosition );
|
||||
mCardsContainer.setCurrentItem( mCurrentPosition + position - lastFactPosition,
|
||||
Math.abs( lastFactPosition - position ) == 1 );
|
||||
} else {
|
||||
Logger.e(TAG, "Can't find type of %s's position", cardType);
|
||||
Logger.e( TAG, "Can't find type of %s's position", cardType );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
MapBroadCastHelper.getInstance(this).mapFrount();
|
||||
MapBroadCastHelper.getInstance( this ).mapFrount();
|
||||
super.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
MapBroadCastHelper.getInstance(this).mapBackground();
|
||||
MapBroadCastHelper.getInstance( this ).mapBackground();
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (mMogoFragmentManager.getStackSize() == 0) {
|
||||
if ( mMogoFragmentManager.getStackSize() == 0 ) {
|
||||
return;
|
||||
}
|
||||
if (mMogoFragmentManager != null) {
|
||||
if ( mMogoFragmentManager != null ) {
|
||||
mMogoFragmentManager.pop();
|
||||
}
|
||||
}
|
||||
@@ -370,12 +371,12 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (mLocationClient != null) {
|
||||
mLocationClient.removeLocationListener(this);
|
||||
if ( mLocationClient != null ) {
|
||||
mLocationClient.removeLocationListener( this );
|
||||
mLocationClient.destroy();
|
||||
}
|
||||
mLocationClient = null;
|
||||
if (mMogoModuleHandler != null) {
|
||||
if ( mMogoModuleHandler != null ) {
|
||||
mMogoModuleHandler.destroy();
|
||||
}
|
||||
mMogoModuleHandler = null;
|
||||
@@ -383,38 +384,39 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
|
||||
mMogoMapUIController = null;
|
||||
mMogoCardManager = null;
|
||||
mMogoFragmentManager = null;
|
||||
AIAssist.getInstance(this).release();
|
||||
AIAssist.getInstance( this ).release();
|
||||
}
|
||||
|
||||
@Override public void onIntentReceived(String intentStr, Intent intent) {
|
||||
if (TextUtils.isEmpty(intentStr)) {
|
||||
@Override
|
||||
public void onIntentReceived( String intentStr, Intent intent ) {
|
||||
if ( TextUtils.isEmpty( intentStr ) ) {
|
||||
return;
|
||||
}
|
||||
int currentItem = mCardsContainer.getCurrentItem();
|
||||
int cardSize = mCardModulesAdapter.getCount();
|
||||
|
||||
switch (intentStr) {
|
||||
switch ( intentStr ) {
|
||||
case VoiceConstants.COMMAND_ZHIDAO_SWITCHCARD:
|
||||
|
||||
String data = intent.getStringExtra("data");
|
||||
String data = intent.getStringExtra( "data" );
|
||||
|
||||
try {
|
||||
JSONObject jsonObject = new JSONObject(data);
|
||||
JSONObject jsonObject = new JSONObject( data );
|
||||
|
||||
String card = jsonObject.getString("card");
|
||||
String card = jsonObject.getString( "card" );
|
||||
|
||||
if (TextUtils.equals("多媒体",card)) {
|
||||
mCardsContainer.setCurrentItem(1);
|
||||
if ( TextUtils.equals( "多媒体", card ) ) {
|
||||
mCardsContainer.setCurrentItem( 1 );
|
||||
|
||||
}else if (TextUtils.equals("探路",card)){
|
||||
mCardsContainer.setCurrentItem(3);
|
||||
} else if ( TextUtils.equals( "探路", card ) ) {
|
||||
mCardsContainer.setCurrentItem( 3 );
|
||||
|
||||
|
||||
}else if (TextUtils.equals("在线车辆",card)){
|
||||
mCardsContainer.setCurrentItem(5);
|
||||
} else if ( TextUtils.equals( "在线车辆", card ) ) {
|
||||
mCardsContainer.setCurrentItem( 5 );
|
||||
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
} catch ( JSONException e ) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@@ -422,16 +424,16 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
|
||||
|
||||
case VoiceConstants.COMMAND_ZHIDAO_SWITCHCARD_NEXT:
|
||||
currentItem++;
|
||||
mCardsContainer.setCurrentItem(currentItem / cardSize);
|
||||
mCardsContainer.setCurrentItem( currentItem / cardSize );
|
||||
|
||||
break;
|
||||
|
||||
case VoiceConstants.COMMAND_ZHIDAO_SWITCHCARD_PREVIOUS:
|
||||
currentItem--;
|
||||
if (currentItem < 0) {
|
||||
if ( currentItem < 0 ) {
|
||||
currentItem += cardSize;
|
||||
}
|
||||
mCardsContainer.setCurrentItem(currentItem / cardSize);
|
||||
mCardsContainer.setCurrentItem( currentItem / cardSize );
|
||||
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.mogo.map.location.IMogoLocationClient;
|
||||
import com.mogo.map.location.IMogoLocationListener;
|
||||
import com.mogo.map.marker.IMogoMarker;
|
||||
import com.mogo.map.marker.IMogoMarkerClickListener;
|
||||
import com.mogo.map.navi.IMogoAimlessModeListener;
|
||||
import com.mogo.map.navi.IMogoNaviListener;
|
||||
import com.mogo.service.module.IMogoModuleProvider;
|
||||
|
||||
@@ -22,7 +23,8 @@ import javax.security.auth.callback.Callback;
|
||||
public interface MogoModulesHandler extends IMogoMapListener,
|
||||
IMogoNaviListener,
|
||||
IMogoLocationListener,
|
||||
IMogoMarkerClickListener {
|
||||
IMogoMarkerClickListener,
|
||||
IMogoAimlessModeListener {
|
||||
|
||||
/**
|
||||
* 地图加载完成回调
|
||||
|
||||
@@ -16,7 +16,9 @@ import com.mogo.map.location.MogoLocation;
|
||||
import com.mogo.map.marker.IMogoMarker;
|
||||
import com.mogo.map.marker.IMogoMarkerClickListener;
|
||||
import com.mogo.map.model.MogoPoi;
|
||||
import com.mogo.map.navi.IMogoAimlessModeListener;
|
||||
import com.mogo.map.navi.IMogoNaviListener;
|
||||
import com.mogo.map.navi.MogoCongestionInfo;
|
||||
import com.mogo.map.navi.MogoNaviInfo;
|
||||
import com.mogo.map.navi.MogoTraffic;
|
||||
import com.mogo.map.uicontroller.EnumMapUI;
|
||||
@@ -530,20 +532,7 @@ public class MogoModulesManager implements MogoModulesHandler,
|
||||
|
||||
@Override
|
||||
public void onUpdateTraffic( MogoTraffic traffic ) {
|
||||
Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners();
|
||||
if ( iterator == null ) {
|
||||
return;
|
||||
}
|
||||
while ( iterator.hasNext() ) {
|
||||
IMogoNaviListener listener = iterator.next();
|
||||
if ( listener != null ) {
|
||||
try {
|
||||
listener.onUpdateTraffic( traffic );
|
||||
} catch ( Exception e ) {
|
||||
Logger.e( TAG, e, "error." );
|
||||
}
|
||||
}
|
||||
}
|
||||
Logger.e( TAG, "error. call deprecated method, use onUpdateTraffic2 instead." );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -601,7 +590,7 @@ public class MogoModulesManager implements MogoModulesHandler,
|
||||
public void destroy() {
|
||||
if ( mMogoIntentManager != null ) {
|
||||
mMogoIntentManager.unregisterIntentListener( Intent.ACTION_POWER_CONNECTED, this );
|
||||
mMogoIntentManager.unregisterIntentListener( Intent.ACTION_POWER_DISCONNECTED,this );
|
||||
mMogoIntentManager.unregisterIntentListener( Intent.ACTION_POWER_DISCONNECTED, this );
|
||||
mMogoIntentManager.unregisterIntentListener( MogoReceiver.ACTION_NWD_ACC, this );
|
||||
}
|
||||
mActivity = null;
|
||||
@@ -626,6 +615,34 @@ public class MogoModulesManager implements MogoModulesHandler,
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateTraffic2( MogoTraffic traffic ) {
|
||||
Iterator< IMogoAimlessModeListener > iterator = MogoRegisterCenterHandler.getInstance().getAimlessModeListeners();
|
||||
if ( iterator == null ) {
|
||||
return;
|
||||
}
|
||||
while ( iterator.hasNext() ) {
|
||||
IMogoAimlessModeListener listener = iterator.next();
|
||||
if ( listener == null ) {
|
||||
listener.onUpdateTraffic2( traffic );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateCongestion( MogoCongestionInfo info ) {
|
||||
Iterator< IMogoAimlessModeListener > iterator = MogoRegisterCenterHandler.getInstance().getAimlessModeListeners();
|
||||
if ( iterator == null ) {
|
||||
return;
|
||||
}
|
||||
while ( iterator.hasNext() ) {
|
||||
IMogoAimlessModeListener listener = iterator.next();
|
||||
if ( listener == null ) {
|
||||
listener.onUpdateCongestion( info );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCurrentModuleName() {
|
||||
return mEnableModuleName;
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.mogo.map.listener.IMogoMapListener;
|
||||
import com.mogo.map.location.IMogoLocationListener;
|
||||
import com.mogo.map.marker.IMogoMarkerClickListener;
|
||||
import com.mogo.map.navi.IMogoAimlessModeListener;
|
||||
import com.mogo.map.navi.IMogoNaviListener;
|
||||
import com.mogo.service.MogoServicePaths;
|
||||
import com.mogo.service.module.IMogoModuleLifecycle;
|
||||
@@ -71,7 +72,16 @@ public class MogoRegisterCenter implements IMogoRegisterCenter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init( Context context ) {
|
||||
public void registerMogoAimlessModeListener( String tag, IMogoAimlessModeListener listener ) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterMogoAimlessModeListener( String tag ) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init( Context context ) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.content.Context;
|
||||
import com.mogo.map.listener.IMogoMapListener;
|
||||
import com.mogo.map.location.IMogoLocationListener;
|
||||
import com.mogo.map.marker.IMogoMarkerClickListener;
|
||||
import com.mogo.map.navi.IMogoAimlessModeListener;
|
||||
import com.mogo.map.navi.IMogoNaviListener;
|
||||
import com.mogo.service.module.IMogoModuleLifecycle;
|
||||
import com.mogo.service.module.IMogoRegisterCenter;
|
||||
@@ -22,13 +23,13 @@ import java.util.Map;
|
||||
public class MogoRegisterCenterHandler implements IMogoRegisterCenter {
|
||||
|
||||
private static volatile MogoRegisterCenterHandler sInstance;
|
||||
private Context mContext;
|
||||
|
||||
private Map< String, IMogoModuleLifecycle > mLifecycle = new HashMap<>();
|
||||
private Map< String, IMogoMapListener > mMap = new HashMap<>();
|
||||
private Map< String, IMogoNaviListener > mNavi = new HashMap<>();
|
||||
private Map< String, IMogoLocationListener > mLocation = new HashMap<>();
|
||||
private Map< String, IMogoMarkerClickListener > mMarker = new HashMap<>();
|
||||
private Map< String, IMogoAimlessModeListener > mAimless = new HashMap<>();
|
||||
|
||||
private MogoRegisterCenterHandler() {
|
||||
}
|
||||
@@ -99,11 +100,18 @@ public class MogoRegisterCenterHandler implements IMogoRegisterCenter {
|
||||
mMarker.remove( tag );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerMogoAimlessModeListener( String tag, IMogoAimlessModeListener listener ) {
|
||||
mAimless.put( tag, listener );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisterMogoAimlessModeListener( String tag ) {
|
||||
mAimless.remove( tag );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init( Context context ) {
|
||||
if ( mContext == null && context != null ) {
|
||||
mContext = context.getApplicationContext();
|
||||
}
|
||||
}
|
||||
|
||||
public IMogoModuleLifecycle getLifecycleListener( String tag ) {
|
||||
@@ -145,4 +153,8 @@ public class MogoRegisterCenterHandler implements IMogoRegisterCenter {
|
||||
public Iterator< IMogoMarkerClickListener > getMarkerListeners() {
|
||||
return mMarker.values().iterator();
|
||||
}
|
||||
|
||||
public Iterator< IMogoAimlessModeListener > getAimlessModeListeners() {
|
||||
return mAimless.values().iterator();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,9 @@ import com.mogo.map.location.MogoLocation;
|
||||
import com.mogo.map.marker.IMogoMarkerClickListener;
|
||||
import com.mogo.map.marker.IMogoMarkerManager;
|
||||
import com.mogo.map.model.MogoPoi;
|
||||
import com.mogo.map.navi.IMogoAimlessModeListener;
|
||||
import com.mogo.map.navi.IMogoNaviListener;
|
||||
import com.mogo.map.navi.MogoCongestionInfo;
|
||||
import com.mogo.map.navi.MogoNaviInfo;
|
||||
import com.mogo.map.navi.MogoTraffic;
|
||||
import com.mogo.map.uicontroller.EnumMapUI;
|
||||
@@ -60,7 +62,8 @@ public class MogoServices implements IMogoMapListener,
|
||||
IMogoLocationListener,
|
||||
IMogoNaviListener,
|
||||
IMogoStatusChangedListener,
|
||||
IMogoIntentListener {
|
||||
IMogoIntentListener,
|
||||
IMogoAimlessModeListener {
|
||||
|
||||
private MogoServices() {
|
||||
// private constructor
|
||||
@@ -601,8 +604,18 @@ public class MogoServices implements IMogoMapListener,
|
||||
|
||||
@Override
|
||||
public void onUpdateTraffic( MogoTraffic traffic ) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateTraffic2( MogoTraffic traffic ) {
|
||||
|
||||
if ( traffic != null ) {
|
||||
|
||||
if ( traffic.getSpeedLimit() <= 0 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
Logger.i( TAG, "speed = %d, desc = %s", traffic.getSpeedLimit(), traffic.getDesc() );
|
||||
// 发送当前限速到 adas
|
||||
Intent intent = new Intent( "com.mogo.launcher.adas" );
|
||||
@@ -611,8 +624,9 @@ public class MogoServices implements IMogoMapListener,
|
||||
}
|
||||
}
|
||||
|
||||
public IMogoMarkerClickListener getMarkerClickListener() {
|
||||
return null;
|
||||
@Override
|
||||
public void onUpdateCongestion( MogoCongestionInfo info ) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -76,8 +76,8 @@ public class MapMarkerInfoView extends MapMarkerBaseView {
|
||||
ivIcon.setVisibility(View.INVISIBLE);
|
||||
loadImageWithMarker(markerShowEntity);
|
||||
ivCar.setImageResource(R.drawable.icon_map_marker_car_gray);
|
||||
ivCar.setRotation(new Random().nextInt(360));
|
||||
// ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle());
|
||||
//ivCar.setRotation(new Random().nextInt(360));
|
||||
ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle());
|
||||
|
||||
if (bindObj instanceof MarkerOnlineCar) {
|
||||
if (((MarkerOnlineCar) bindObj).getUserInfo().getGenderValue() == 0) {
|
||||
|
||||
@@ -67,8 +67,8 @@ public class MapMarkerView extends MapMarkerBaseView {
|
||||
ivIcon.setVisibility(View.INVISIBLE);
|
||||
loadImageWithMarker(markerShowEntity);
|
||||
ivCar.setImageResource(R.drawable.icon_map_marker_car_gray);
|
||||
// ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle());
|
||||
ivCar.setRotation(new Random().nextInt(360));
|
||||
ivCar.setRotation((float) markerShowEntity.getMarkerLocation().getAngle());
|
||||
// ivCar.setRotation(new Random().nextInt(360));
|
||||
|
||||
if (bindObj instanceof MarkerOnlineCar) {
|
||||
if (((MarkerOnlineCar) bindObj).getUserInfo().getGenderValue() == 0) {
|
||||
|
||||
@@ -8,7 +8,6 @@ import android.text.TextUtils;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.mogo.service.MogoServicePaths;
|
||||
import com.mogo.service.intent.IMogoIntentManager;
|
||||
import com.mogo.service.voice.IMogoVoiceManager;
|
||||
import com.mogo.utils.logger.Logger;
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
package com.mogo.service;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.alibaba.android.arouter.facade.template.IProvider;
|
||||
import com.mogo.service.analytics.IMogoAnalytics;
|
||||
import com.mogo.service.cardmanager.IMogoCardManager;
|
||||
import com.mogo.service.connection.IMogoSocketManager;
|
||||
import com.mogo.service.datamanager.IMogoDataManager;
|
||||
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
|
||||
import com.mogo.service.imageloader.IMogoImageloader;
|
||||
import com.mogo.service.intent.IMogoIntentManager;
|
||||
import com.mogo.service.map.IMogoMapService;
|
||||
import com.mogo.service.module.IMogoRegisterCenter;
|
||||
import com.mogo.service.module.IMogoSearchManager;
|
||||
import com.mogo.service.module.IMogoSettingManager;
|
||||
import com.mogo.service.network.IMogoNetwork;
|
||||
import com.mogo.service.statusmanager.IMogoMsgCenter;
|
||||
import com.mogo.service.statusmanager.IMogoStatusManager;
|
||||
import com.mogo.service.windowview.IMogoWindowManager;
|
||||
|
||||
/**
|
||||
* @author congtaowang
|
||||
* @since 2020-03-06
|
||||
* <p>
|
||||
* 描述
|
||||
*/
|
||||
|
||||
public interface IMogoServiceApis extends IProvider {
|
||||
|
||||
/**
|
||||
* 获取埋点接口实例
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
IMogoAnalytics getAnalyticsApi();
|
||||
|
||||
/**
|
||||
* 卡片控制
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
IMogoCardManager getCardManagerApi();
|
||||
|
||||
/**
|
||||
* 获取socket操作api
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
IMogoSocketManager getSocketManagerApi( Context context );
|
||||
|
||||
/**
|
||||
* 大而全的数据管理接口
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
IMogoDataManager getDataManagerApi();
|
||||
|
||||
/**
|
||||
* fragment 管理接口
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
IMogoFragmentManager getFragmentManagerApi();
|
||||
|
||||
/**
|
||||
* 图片加载
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
IMogoImageloader getImageLoaderApi();
|
||||
|
||||
/**
|
||||
* 广播、语音指令分发
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
IMogoIntentManager getIntentManagerApi();
|
||||
|
||||
/**
|
||||
* 地图方服务接口
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
IMogoMapService getMapServiceApi();
|
||||
|
||||
/**
|
||||
* 各业务回调接口注册接口
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
IMogoRegisterCenter getRegisterCenterApi();
|
||||
|
||||
/**
|
||||
* 搜搜页面操作设置
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
IMogoSearchManager getSearchManagerApi();
|
||||
|
||||
/**
|
||||
* 导航设置页面
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
IMogoSettingManager getSettingManager();
|
||||
|
||||
/**
|
||||
* 网络接口api
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
IMogoNetwork getNetworkApi();
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
IMogoMsgCenter getMsgCenterApi();
|
||||
|
||||
/**
|
||||
* 状态管理接口
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
IMogoStatusManager getStatusManagerApi();
|
||||
|
||||
/**
|
||||
* 桌面浮窗控制接口
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
IMogoWindowManager getWindowManager();
|
||||
}
|
||||
@@ -20,18 +20,21 @@ public class MogoServicePaths {
|
||||
* 地图服务接口ARouter实例化路径
|
||||
*/
|
||||
@Keep
|
||||
@Deprecated
|
||||
public static final String PATH_SERVICES_MAP = "/mapservices/api";
|
||||
|
||||
/**
|
||||
* 图片接口ARouter实例化路径
|
||||
*/
|
||||
@Keep
|
||||
@Deprecated
|
||||
public static final String PATH_UTILS_IMAGE_LOADER = "/imageloader/api";
|
||||
|
||||
/**
|
||||
* 埋点接口ARouter实例化路径
|
||||
*/
|
||||
@Keep
|
||||
@Deprecated
|
||||
public static final String PATH_UTILS_ANALYTICS = "/utils/analytics";
|
||||
|
||||
|
||||
@@ -39,36 +42,43 @@ public class MogoServicePaths {
|
||||
* 网络服务接口路径
|
||||
*/
|
||||
@Keep
|
||||
@Deprecated
|
||||
public static final String PATH_SERVICES_NETWORK = "/networkservices/api";
|
||||
|
||||
/**
|
||||
* netty 长链
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_SOCKET_MANAGER = "/socket/manager";
|
||||
|
||||
/**
|
||||
* 状态管理接口
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_STATUS_MANAGER = "/statusmanager/api";
|
||||
|
||||
/**
|
||||
* 消息中心
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_MSG_CENTER = "/msgcenter/api";
|
||||
|
||||
/**
|
||||
* 消息中心
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_WINDOW_MANAGER = "/windowmanger/api";
|
||||
|
||||
/**
|
||||
* 卡片控制
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_CARD_MANAGER = "/cardmanager/api";
|
||||
|
||||
/**
|
||||
* 管理 fragment
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_FRAGMENT_MANAGER = "/fragmentmanager/api";
|
||||
|
||||
/**
|
||||
@@ -76,43 +86,54 @@ public class MogoServicePaths {
|
||||
*
|
||||
* @deprecated use {@link #PATH_INTENT_MANAGER} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_VOICE_MANAGER = "/voicemanager/api";
|
||||
|
||||
/**
|
||||
* 意图控制接口
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_INTENT_MANAGER = "/intentmanager/api";
|
||||
|
||||
/**
|
||||
* 基础功能监听回调注册
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_REGISTER_CENTER = "/registercenter/api";
|
||||
|
||||
/**
|
||||
* 基础家和公司管理
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_ADDRESS_MANAGER = "/addressmanager/api";
|
||||
|
||||
/**
|
||||
* 导航搜索模块管理
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_SEARCH_MANAGER = "/searchmanager/api";
|
||||
|
||||
/**
|
||||
* 基础设置参数管理
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_SETTING_MANAGER = "/settingmanager/api";
|
||||
|
||||
|
||||
/**
|
||||
* 搜索module管理中心
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_SERACH_CENTER = "/searchcenter/api";
|
||||
|
||||
/**
|
||||
* 大而全数据管理中心
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String PATH_DATA_MANAGER = "/datamanager/api";
|
||||
|
||||
|
||||
/**
|
||||
* 接口集合
|
||||
*/
|
||||
public static final String PATH_SERVICE_APIS = "/mogoservice/apis";
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.alibaba.android.arouter.facade.template.IProvider;
|
||||
import com.mogo.map.listener.IMogoMapListener;
|
||||
import com.mogo.map.location.IMogoLocationListener;
|
||||
import com.mogo.map.marker.IMogoMarkerClickListener;
|
||||
import com.mogo.map.navi.IMogoAimlessModeListener;
|
||||
import com.mogo.map.navi.IMogoNaviListener;
|
||||
|
||||
/**
|
||||
@@ -93,4 +94,21 @@ public interface IMogoRegisterCenter extends IProvider {
|
||||
*/
|
||||
void unregisterMogoMarkerClickListener( String tag );
|
||||
|
||||
/**
|
||||
* 注册巡航监听
|
||||
*
|
||||
* @param tag
|
||||
* @param listener
|
||||
* @return
|
||||
*/
|
||||
void registerMogoAimlessModeListener( String tag, IMogoAimlessModeListener listener );
|
||||
|
||||
/**
|
||||
* 注销定位监听函数
|
||||
*
|
||||
* @param tag
|
||||
*/
|
||||
void unregisterMogoAimlessModeListener( String tag );
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
package com.mogo.service.impl;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.alibaba.android.arouter.facade.annotation.Route;
|
||||
import com.alibaba.android.arouter.facade.template.IProvider;
|
||||
import com.alibaba.android.arouter.launcher.ARouter;
|
||||
import com.mogo.connection.socket.SocketManager;
|
||||
import com.mogo.service.IMogoServiceApis;
|
||||
import com.mogo.service.MogoServicePaths;
|
||||
import com.mogo.service.analytics.IMogoAnalytics;
|
||||
import com.mogo.service.cardmanager.IMogoCardManager;
|
||||
import com.mogo.service.connection.IMogoSocketManager;
|
||||
import com.mogo.service.datamanager.IMogoDataManager;
|
||||
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
|
||||
import com.mogo.service.imageloader.IMogoImageloader;
|
||||
import com.mogo.service.impl.analytics.impl.MogoAnalyticsImpl;
|
||||
import com.mogo.service.impl.imageloader.glide.GlideImageLoader;
|
||||
import com.mogo.service.impl.intent.IntentManager;
|
||||
import com.mogo.service.impl.singleton.SingletonsHolder;
|
||||
import com.mogo.service.intent.IMogoIntentManager;
|
||||
import com.mogo.service.map.IMogoMapService;
|
||||
import com.mogo.service.module.IMogoRegisterCenter;
|
||||
import com.mogo.service.module.IMogoSearchManager;
|
||||
import com.mogo.service.module.IMogoSettingManager;
|
||||
import com.mogo.service.network.IMogoNetwork;
|
||||
import com.mogo.service.statusmanager.IMogoMsgCenter;
|
||||
import com.mogo.service.statusmanager.IMogoStatusManager;
|
||||
import com.mogo.service.windowview.IMogoWindowManager;
|
||||
import com.mogo.utils.logger.Logger;
|
||||
|
||||
/**
|
||||
* @author congtaowang
|
||||
* @since 2020-03-06
|
||||
* <p>
|
||||
* 描述
|
||||
*/
|
||||
|
||||
@Route( path = MogoServicePaths.PATH_SERVICE_APIS )
|
||||
public class MogoServiceApis implements IMogoServiceApis {
|
||||
|
||||
private static final String TAG = "MogoServiceApis";
|
||||
|
||||
private static Object sLock = new Object();
|
||||
|
||||
@Override
|
||||
public IMogoAnalytics getAnalyticsApi() {
|
||||
return MogoAnalyticsImpl.getInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMogoSocketManager getSocketManagerApi( Context context ) {
|
||||
return SocketManager.getInstance( context );
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMogoFragmentManager getFragmentManagerApi() {
|
||||
return SingletonsHolder.get( IMogoFragmentManager.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMogoImageloader getImageLoaderApi() {
|
||||
return GlideImageLoader.getInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMogoIntentManager getIntentManagerApi() {
|
||||
return IntentManager.getInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMogoMapService getMapServiceApi() {
|
||||
return SingletonsHolder.get( IMogoMapService.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMogoNetwork getNetworkApi() {
|
||||
return SingletonsHolder.get( IMogoNetwork.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMogoMsgCenter getMsgCenterApi() {
|
||||
return SingletonsHolder.get( IMogoMsgCenter.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMogoStatusManager getStatusManagerApi() {
|
||||
return SingletonsHolder.get( IMogoStatusManager.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init( Context context ) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized IMogoCardManager getCardManagerApi() {
|
||||
return getApiInstance( IMogoCardManager.class, MogoServicePaths.PATH_CARD_MANAGER );
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMogoDataManager getDataManagerApi() {
|
||||
return getApiInstance( IMogoDataManager.class, MogoServicePaths.PATH_DATA_MANAGER );
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMogoRegisterCenter getRegisterCenterApi() {
|
||||
return getApiInstance( IMogoRegisterCenter.class, MogoServicePaths.PATH_REGISTER_CENTER );
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMogoSearchManager getSearchManagerApi() {
|
||||
return getApiInstance( IMogoSearchManager.class, MogoServicePaths.PATH_SEARCH_MANAGER );
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMogoSettingManager getSettingManager() {
|
||||
return getApiInstance( IMogoSettingManager.class, MogoServicePaths.PATH_SETTING_MANAGER );
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMogoWindowManager getWindowManager() {
|
||||
return getApiInstance( IMogoWindowManager.class, MogoServicePaths.PATH_WINDOW_MANAGER );
|
||||
}
|
||||
|
||||
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();
|
||||
try {
|
||||
SingletonsHolder.registerApi( clazz, newInst );
|
||||
Logger.d( TAG, "keep IProvider instance to SingletonHolder: path = %s", path );
|
||||
} catch ( Exception e ) {
|
||||
Logger.e( TAG, e, "error." );
|
||||
}
|
||||
return newInst;
|
||||
}
|
||||
}
|
||||
return inst;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.mogo.service.impl.singleton;
|
||||
|
||||
import com.alibaba.android.arouter.facade.template.IProvider;
|
||||
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
|
||||
import com.mogo.service.impl.fragmentmanager.MogoFragmentManager;
|
||||
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.map.IMogoMapService;
|
||||
import com.mogo.service.network.IMogoNetwork;
|
||||
import com.mogo.service.statusmanager.IMogoMsgCenter;
|
||||
import com.mogo.service.statusmanager.IMogoStatusManager;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* @author congtaowang
|
||||
* @since 2020-03-06
|
||||
* <p>
|
||||
* 描述
|
||||
*/
|
||||
public class SingletonsHolder {
|
||||
|
||||
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() );
|
||||
}
|
||||
|
||||
public static < T > 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 ) {
|
||||
throw new Exception( "IProvider 接口类型和实例不能为 null" );
|
||||
}
|
||||
sSingletons.put( api, impl );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user