Merge remote-tracking branch 'origin/feature/v1.0.2' into feature/v1.0.2

This commit is contained in:
zhangyuanzhen
2020-03-11 12:56:44 +08:00
49 changed files with 1882 additions and 784 deletions

2
.idea/misc.xml generated
View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
</project>

View File

@@ -46,12 +46,13 @@ public class MogoApplication extends AbsMogoApplication {
//运营位卡片,需要默认显示,放在第一个加载
MogoModulePaths.addModule(new MogoModule(AdCardConstants.TAG, AdCardConstants.MODULE_NAME));
MogoModulePaths.addModule(new MogoModule(OnLineCarConstants.TAG, OnLineCarConstants.MODULE_NAME));
MogoModulePaths.addModule(new MogoModule(V2XConst.PATH_V2X_UI, V2XConst.PATH_V2X_UI));
MogoModulePaths.addModule(new MogoModule(TanluConstants.TAG, TanluConstants.MODEL_NAME));
MogoModulePaths.addModule(new MogoModule(CallChatConstant.PROVIDER, CallChatConstant.MODULE_NAME));
MogoModulePaths.addModule(new MogoModule(MediaConstants.TAG, MediaConstants.MODULE_TYPE));
MogoModulePaths.addModule(new MogoModule(CallChatConstant.PROVIDER, CallChatConstant.MODULE_NAME));
MogoModulePaths.addModule(new MogoModule(TanluConstants.TAG, TanluConstants.MODEL_NAME));
MogoModulePaths.addModule(new MogoModule(OnLineCarConstants.TAG, OnLineCarConstants.MODULE_NAME));
MogoModulePaths.addModule(new MogoModule( FreshNewsConstants.TAG, FreshNewsConstants.MODULE_NAME));
MogoModulePaths.addModule(new MogoModule(V2XConst.PATH_V2X_UI, V2XConst.PATH_V2X_UI));
MogoModulePaths.addModule(new MogoModule(PushUIConstants.TAG, PushUIConstants.TAG));
MogoModulePaths.addModule(new MogoModule( BackToLauncherConst.MODULE_PATH, BackToLauncherConst.MODULE_NAME));
Log.i("timer", "cost " + (System.currentTimeMillis() - start) + "ms");

View File

@@ -107,7 +107,7 @@ public class SocketManager implements IMogoSocketManager, OnSocketReceiveCallbac
object = GsonUtil.objectFromJson( payload.getPayload().toStringUtf8(), listener.target() );
}
if ( listener != null ) {
Logger.d( TAG, "received msgId = %s", msgId );
Logger.d( TAG, "received msgId = %s, content = %s", msgId, payload.getPayload().toStringUtf8() );
listener.onMsgReceived( object );
}
}

View File

@@ -5,7 +5,7 @@ import java.util.concurrent.Executors;
public class ThreadPoolService {
private static final ExecutorService SERVICE = Executors.newScheduledThreadPool( 3 );
private static final ExecutorService SERVICE = Executors.newFixedThreadPool( 3 );
private ThreadPoolService() {
}

View File

@@ -7,6 +7,7 @@ import android.graphics.Point;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.SystemClock;
import android.os.Trace;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Interpolator;
@@ -319,7 +320,9 @@ public class AMapNaviViewWrapper implements IMogoMapView,
@Override
public void onLockMap( boolean isLock ) {
Logger.d( TAG, "lock status = %s", isLock );
Trace.beginSection( "timer.onCameraChangeFinish" );
MogoMapListenerHandler.getInstance().onLockMap( isLock );
Trace.endSection();
}
@Override
@@ -418,7 +421,6 @@ public class AMapNaviViewWrapper implements IMogoMapView,
}
private boolean checkAMapView() {
if ( mMapView == null ) {
Logger.e( TAG, "高德mapView实例为空请检查" );
@@ -549,17 +551,19 @@ public class AMapNaviViewWrapper implements IMogoMapView,
@Override
public void onCameraChangeFinish( CameraPosition cameraPosition ) {
if ( cameraPosition != null ) {
MogoMapListenerHandler.getInstance()
.onMapChanged( ObjectUtils.fromAMap( cameraPosition.target ), cameraPosition.zoom,
cameraPosition.tilt, cameraPosition.bearing );
Trace.beginSection( "timer.onCameraChangeFinish" );
MogoMapListenerHandler.getInstance().onMapChanged( ObjectUtils.fromAMap( cameraPosition.target ),
cameraPosition.zoom,
cameraPosition.tilt,
cameraPosition.bearing );
Trace.endSection();
}
}
@Override
public MogoLatLng getCameraNorthEastPosition() {
try {
return ObjectUtils.fromAMap(
mMapView.getMap().getProjection().getVisibleRegion().latLngBounds.northeast );
return ObjectUtils.fromAMap( mMapView.getMap().getProjection().getVisibleRegion().latLngBounds.northeast );
} catch ( Exception e ) {
}
@@ -569,8 +573,7 @@ public class AMapNaviViewWrapper implements IMogoMapView,
@Override
public MogoLatLng getCameraSouthWestPosition() {
try {
return ObjectUtils.fromAMap(
mMapView.getMap().getProjection().getVisibleRegion().latLngBounds.southwest );
return ObjectUtils.fromAMap( mMapView.getMap().getProjection().getVisibleRegion().latLngBounds.southwest );
} catch ( Exception e ) {
}

View File

@@ -6,16 +6,21 @@ import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.Polyline;
import com.amap.api.maps.model.PolylineOptions;
import com.amap.api.navi.AMapNaviView;
import com.mogo.map.IMogoMap;
import com.mogo.map.IMogoUiSettings;
import com.mogo.map.impl.amap.marker.AMapInfoWindowAdapter;
import com.mogo.map.impl.amap.marker.AMapMarkerWrapper;
import com.mogo.map.impl.amap.overlay.AMapPolylineWrapper;
import com.mogo.map.impl.amap.uicontroller.AMapUIController;
import com.mogo.map.impl.amap.utils.ObjectUtils;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.MogoMarkerOptions;
import com.mogo.map.marker.MogoMarkersHandler;
import com.mogo.map.overlay.IMogoPolyline;
import com.mogo.map.overlay.MogoPolylineOptions;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.utils.logger.Logger;
@@ -219,6 +224,19 @@ public class AMapWrapper implements IMogoMap {
return 0;
}
@Override
public IMogoPolyline addPolyline( MogoPolylineOptions options ) {
if ( checkAMap() ) {
PolylineOptions polylineOptions = ObjectUtils.fromMogo( options );
if ( polylineOptions == null ) {
return null;
}
Polyline polyline = mAMap.addPolyline( polylineOptions );
return new AMapPolylineWrapper( polyline, options );
}
return null;
}
private boolean checkAMap() {
if ( mAMap == null ) {
Logger.e( TAG, "高德map实例为空请检查" );

View File

@@ -1,6 +1,7 @@
package com.mogo.map.impl.amap.location;
import android.content.Context;
import android.os.Trace;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
@@ -139,6 +140,7 @@ public class ALocationClient implements IMogoLocationClient {
aMapLocation.getLongitude() == 0.0D ) {
return;
}
Trace.beginSection("timer.onLocationChanged");
mLastLocation = ObjectUtils.fromAMap( aMapLocation );
synchronized ( sListeners ) {
Iterator< IMogoLocationListener > listenerIterator = sListeners.iterator();
@@ -146,6 +148,7 @@ public class ALocationClient implements IMogoLocationClient {
listenerIterator.next().onLocationChanged( mLastLocation.clone() );
}
}
Trace.endSection();
}
}

View File

@@ -294,7 +294,13 @@ public class AMapMarkerWrapper implements IMogoMarker, Observer {
@Override
public String getOwner() {
return this.mOwner == null ? mMogoMarkerOptions.getOwner() : mOwner;
if ( mOwner != null ) {
return mOwner;
}
if ( mMogoMarkerOptions != null ) {
return mMogoMarkerOptions.getOwner();
}
return null;
}
@Override

View File

@@ -2,6 +2,7 @@ package com.mogo.map.impl.amap.navi;
import android.content.Context;
import android.graphics.Rect;
import android.os.Trace;
import com.amap.api.maps.model.Polyline;
import com.amap.api.navi.AMapNavi;
@@ -178,8 +179,10 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter {
@Override
public void onNaviInfoUpdate( NaviInfo naviInfo ) {
Trace.beginSection( "NaviListenerAdapter.onNaviInfoUpdate" );
MogoNaviListenerHandler.getInstance().onNaviInfoUpdate( ObjectUtils.fromAMap( mContext, naviInfo ) );
mNaviOverlayHelper.handleNaviInfoUpdate( naviInfo );
Trace.endSection();
}
@Override
@@ -201,8 +204,10 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter {
@Override
public void onLocationChange( AMapNaviLocation aMapNaviLocation ) {
Trace.beginSection( "NaviListenerAdapter.onLocationChange" );
super.onLocationChange( aMapNaviLocation );
mNaviOverlayHelper.handlePassedLocation( aMapNaviLocation );
Trace.endSection();
}
public void stopNavi() {

View File

@@ -0,0 +1,196 @@
package com.mogo.map.impl.amap.overlay;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Polyline;
import com.amap.api.maps.model.PolylineOptions;
import com.mogo.map.MogoLatLng;
import com.mogo.map.impl.amap.utils.ObjectUtils;
import com.mogo.map.overlay.IMogoPolyline;
import com.mogo.map.overlay.MogoPolylineOptions;
import java.util.ArrayList;
import java.util.List;
/**
* @author congtaowang
* @since 2020-03-10
* <p>
* 描述
*/
public class AMapPolylineWrapper implements IMogoPolyline {
private Polyline mPolyline;
private MogoPolylineOptions mOptions;
private boolean mIsDestroyed = false;
public AMapPolylineWrapper( Polyline mPolyline,
MogoPolylineOptions mOptions ) {
this.mPolyline = mPolyline;
this.mOptions = mOptions;
}
@Override
public void destroy() {
remove();
}
@Override
public void remove() {
if ( mPolyline != null ) {
mPolyline.remove();
}
mIsDestroyed = true;
}
@Override
public String getId() {
if ( mPolyline != null ) {
return mPolyline.getId();
}
return null;
}
@Override
public void setPoints( List< MogoLatLng > lonLats ) {
if ( lonLats == null || lonLats.isEmpty() ) {
mPolyline.setPoints( new ArrayList< LatLng >() );
return;
}
ArrayList< LatLng > points = new ArrayList<>();
for ( MogoLatLng lonLat : lonLats ) {
LatLng latLng = ObjectUtils.fromMogo2( lonLat );
if ( latLng == null ) {
continue;
}
points.add( latLng );
}
mPolyline.setPoints( points );
}
@Override
public List< MogoLatLng > getPoints() {
if ( mPolyline == null ) {
return null;
}
ArrayList< MogoLatLng > lonLats = new ArrayList<>();
List< LatLng > points = mPolyline.getPoints();
if ( points != null ) {
for ( LatLng latLng : points ) {
MogoLatLng lonLat = ObjectUtils.fromAMap( latLng );
if ( lonLat == null ) {
continue;
}
lonLats.add( lonLat );
}
}
return lonLats;
}
@Override
public void setGeodesic( boolean draw ) {
if ( mPolyline != null ) {
mPolyline.setGeodesic( draw );
}
}
@Override
public boolean isGeodesic() {
return mPolyline == null ? false : mPolyline.isGeodesic();
}
@Override
public void setDottedLine( boolean dottedLine ) {
if ( mPolyline != null ) {
mPolyline.setDottedLine( dottedLine );
}
}
@Override
public boolean isDottedLine() {
return mPolyline == null ? false : mPolyline.isDottedLine();
}
@Override
public void setWidth( float width ) {
if ( mPolyline != null ) {
mPolyline.setWidth( width );
}
}
@Override
public float getWidth() {
if ( mPolyline != null ) {
return mPolyline.getWidth();
}
return 0;
}
@Override
public void setColor( int color ) {
if ( mPolyline != null ) {
mPolyline.setColor( color );
}
}
@Override
public int getColor() {
if ( mPolyline != null ) {
return mPolyline.getColor();
}
return 0;
}
@Override
public void setZIndex( float zIndex ) {
if ( mPolyline != null ) {
mPolyline.setZIndex( zIndex );
}
}
@Override
public float getZIndex() {
if ( mPolyline != null ) {
return mPolyline.getZIndex();
}
return 0;
}
@Override
public void setVisible( boolean visible ) {
if ( mPolyline != null ) {
mPolyline.setVisible( visible );
}
}
@Override
public boolean isVisible() {
if ( mPolyline != null ) {
return mPolyline.isVisible();
}
return false;
}
@Override
public void setTransparency( float transparency ) {
if ( mPolyline != null ) {
mPolyline.setTransparency( transparency );
}
}
@Override
public void setOption( MogoPolylineOptions option ) {
PolylineOptions target = ObjectUtils.fromMogo( option );
if ( target == null ) {
return;
}
mOptions = option;
if ( mPolyline != null ) {
mPolyline.setOptions( target );
}
}
@Override
public boolean isDestroyed() {
return false;
}
}

View File

@@ -10,6 +10,7 @@ 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.maps.model.PolylineOptions;
import com.amap.api.navi.model.AMapCongestionLink;
import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
import com.amap.api.navi.model.AimLessModeCongestionInfo;
@@ -46,6 +47,7 @@ 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.overlay.MogoPolylineOptions;
import com.mogo.map.search.geo.MogoAoiItem;
import com.mogo.map.search.geo.MogoBusinessArea;
import com.mogo.map.search.geo.MogoCrossroad;
@@ -704,4 +706,31 @@ public class ObjectUtils {
}
return null;
}
public static PolylineOptions fromMogo( MogoPolylineOptions options ) {
if ( options == null ) {
return null;
}
PolylineOptions target = new PolylineOptions();
if ( options.getPoints() != null ) {
List< LatLng > points = new ArrayList<>();
for ( MogoLatLng point : options.getPoints() ) {
points.add( fromMogo2( point ) );
}
target.addAll( points );
}
target.width( options.getWidth() );
target.color( options.getColor() );
target.zIndex( options.getWidth() );
target.visible( options.isVisible() );
target.geodesic( options.isGeodesic() );
target.setDottedLine( options.isDottedLine() );
target.useGradient( options.isGradient() );
target.transparency( options.getTransparency() );
target.aboveMaskLayer( options.isAboveMaskLayer() );
target.lineCapType( PolylineOptions.LineCapType.LineCapRound );
target.lineJoinType( PolylineOptions.LineJoinType.LineJoinRound );
target.setDottedLineType( PolylineOptions.DOTTEDLINE_TYPE_CIRCLE );
return target;
}
}

View File

@@ -2,6 +2,8 @@ package com.mogo.map;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.MogoMarkerOptions;
import com.mogo.map.overlay.IMogoPolyline;
import com.mogo.map.overlay.MogoPolylineOptions;
import com.mogo.map.uicontroller.IMogoMapUIController;
import java.util.ArrayList;
@@ -127,4 +129,12 @@ public interface IMogoMap {
* @return
*/
float getZoomLevel();
/**
* 添加线段
*
* @param options
* @return
*/
IMogoPolyline addPolyline( MogoPolylineOptions options );
}

View File

@@ -54,63 +54,49 @@ public class MogoMapListenerHandler implements IMogoMapListener, IMogoMapListene
@Override
public void onMapLoaded() {
if ( mDelegateListener != null ) {
synchronized ( mDelegateListener ) {
mDelegateListener.onMapLoaded();
}
mDelegateListener.onMapLoaded();
}
}
@Override
public void onTouch( MotionEvent motionEvent ) {
if ( mDelegateListener != null ) {
synchronized ( mDelegateListener ) {
mDelegateListener.onTouch( motionEvent );
}
mDelegateListener.onTouch( motionEvent );
}
}
@Override
public void onPOIClick( MogoPoi poi ) {
if ( mDelegateListener != null ) {
synchronized ( mDelegateListener ) {
mDelegateListener.onPOIClick( poi );
}
mDelegateListener.onPOIClick( poi );
}
}
@Override
public void onMapClick( MogoLatLng latLng ) {
if ( mDelegateListener != null ) {
synchronized ( mDelegateListener ) {
mDelegateListener.onMapClick( latLng );
}
mDelegateListener.onMapClick( latLng );
}
}
@Override
public void onLockMap( boolean isLock ) {
if ( mDelegateListener != null ) {
synchronized ( mDelegateListener ) {
mDelegateListener.onLockMap( isLock );
}
mDelegateListener.onLockMap( isLock );
}
}
@Override
public void onMapModeChanged( EnumMapUI ui ) {
if ( mDelegateListener != null ) {
synchronized ( mDelegateListener ) {
mDelegateListener.onMapModeChanged( ui );
}
mDelegateListener.onMapModeChanged( ui );
}
}
@Override
public void onMapChanged( MogoLatLng location, float zoom, float tilt, float bearing ) {
if ( mDelegateListener != null ) {
synchronized ( mDelegateListener ) {
mDelegateListener.onMapChanged( location, zoom, tilt, bearing );
}
mDelegateListener.onMapChanged( location, zoom, tilt, bearing );
}
}
}

View File

@@ -0,0 +1,18 @@
package com.mogo.map.overlay;
/**
* @author congtaowang
* @since 2020-03-10
* <p>
* 覆盖物
*/
public interface IMogoOverlayManager {
/**
* 绘制线段
*
* @param options
* @return
*/
IMogoPolyline addPolyline( MogoPolylineOptions options );
}

View File

@@ -0,0 +1,144 @@
package com.mogo.map.overlay;
import androidx.annotation.ColorInt;
import com.mogo.map.IDestroyable;
import com.mogo.map.MogoLatLng;
import java.util.List;
/**
* @author congtaowang
* @since 2020-03-10
* <p>
* 线段
*/
public interface IMogoPolyline extends IDestroyable {
/**
* 是否已经销毁
*
* @return
*/
boolean isDestroyed();
/**
* 移除
*/
void remove();
/**
* 获取ID
*
* @return
*/
String getId();
/**
* 设置绘制点数据
*
* @param lonLats
*/
void setPoints( List< MogoLatLng > lonLats );
/**
* 获取点
*
* @return
*/
List< MogoLatLng > getPoints();
/**
* 测地线
*
* @param draw
*/
void setGeodesic( boolean draw );
/**
* 是否设置了测地线
*
* @return
*/
boolean isGeodesic();
/**
* 虚线
*
* @param dottedLine
*/
void setDottedLine( boolean dottedLine );
/**
* 是否是虚线
*
* @return
*/
boolean isDottedLine();
/**
* 设置线宽
*
* @param width
*/
void setWidth( float width );
/**
* 获取线宽
*
* @return
*/
float getWidth();
/**
* 设置线条颜色
*
* @param color
*/
void setColor( @ColorInt int color );
/**
* 获取线条颜色
*
* @return
*/
@ColorInt
int getColor();
/**
* 设置Z轴
*/
void setZIndex( float zIndex );
/**
* 获取Z轴
*
* @return
*/
float getZIndex();
/**
* 设置显示/隐藏
*/
void setVisible( boolean visible );
/**
* 是否可见
*
* @return
*/
boolean isVisible();
/**
* 设置透明度
*
* @param transparency
*/
void setTransparency( float transparency );
/**
* 设置配置项
*/
void setOption( MogoPolylineOptions option );
}

View File

@@ -0,0 +1,214 @@
package com.mogo.map.overlay;
import android.graphics.Color;
import androidx.annotation.ColorInt;
import com.mogo.map.MogoLatLng;
import com.mogo.map.location.MogoLocation;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author congtaowang
* @since 2020-03-10
* <p>
* 线段属性
*/
public class MogoPolylineOptions {
private List< MogoLatLng > mPoints;
private float mWidth = 10.0F;
private int mColor = Color.BLACK;
private float mZIndex = 0.0F;
private boolean mIsVisible = true;
private boolean mIsGeodesic = false;
private boolean mIsDottedLine = false;
private boolean mIsGradient = false;
private float mTransparency = 1.0F;
private boolean mIsAboveMaskLayer = false;
private boolean mIsPointsUpdated = false;
public MogoPolylineOptions() {
this.mPoints = new ArrayList<>();
}
/**
* 设置顶点
*
* @param points
* @return
*/
public MogoPolylineOptions points( List< MogoLatLng > points ) {
this.mPoints.clear();
this.mPoints.addAll( points );
this.mIsPointsUpdated = true;
return this;
}
/**
* 添加顶点到集合最后
*
* @param points
* @return
*/
public MogoPolylineOptions add( MogoLatLng... points ) {
if ( points != null ) {
this.mPoints.addAll( Arrays.asList( points ) );
this.mIsPointsUpdated = true;
}
return this;
}
public MogoPolylineOptions add( double lon, double lat ) {
this.mPoints.add( new MogoLatLng( lat, lon ) );
return this;
}
public MogoPolylineOptions add( MogoLocation location ) {
if ( location != null ) {
this.mPoints.add( new MogoLatLng( location.getLatitude(), location.getLongitude() ) );
}
return this;
}
/**
* 设置线宽
*/
public MogoPolylineOptions width( float width ) {
this.mWidth = width;
return this;
}
/**
* 设置线的颜色
*
* @param color
* @return
*/
public MogoPolylineOptions color( @ColorInt int color ) {
this.mColor = color;
return this;
}
/**
* 设置Z轴的值
*
* @param zIndex
* @return
*/
public MogoPolylineOptions zIndex( float zIndex ) {
this.mZIndex = zIndex;
return this;
}
/**
* 设置是否可见
*
* @param isVisible
* @return
*/
public MogoPolylineOptions visible( boolean isVisible ) {
this.mIsVisible = isVisible;
return this;
}
/**
* 设置是否绘制测地线
*
* @param isGeodesic
* @return
*/
public MogoPolylineOptions geodesic( boolean isGeodesic ) {
this.mIsGeodesic = isGeodesic;
return this;
}
/**
* 是否是虚线
*
* @param isDottedLine
* @return
*/
public MogoPolylineOptions dottedLine( boolean isDottedLine ) {
this.mIsDottedLine = isDottedLine;
return this;
}
/**
* 是否使用渐变色
*
* @param isGradient
* @return
*/
public MogoPolylineOptions useGradient( boolean isGradient ) {
this.mIsGradient = isGradient;
return this;
}
/**
* 设置透明度
*
* @param transparency
* @return
*/
public MogoPolylineOptions transparency( float transparency ) {
this.mTransparency = transparency;
return this;
}
/**
* @param isAboveMaskLayer
* @return
*/
public MogoPolylineOptions aboveMaskLayer( boolean isAboveMaskLayer ) {
this.mIsAboveMaskLayer = isAboveMaskLayer;
return this;
}
public List< MogoLatLng > getPoints() {
return mPoints;
}
public float getWidth() {
return mWidth;
}
public int getColor() {
return mColor;
}
public float getZIndex() {
return mZIndex;
}
public boolean isVisible() {
return mIsVisible;
}
public boolean isGeodesic() {
return mIsGeodesic;
}
public boolean isDottedLine() {
return mIsDottedLine;
}
public boolean isGradient() {
return mIsGradient;
}
public float getTransparency() {
return mTransparency;
}
public boolean isAboveMaskLayer() {
return mIsAboveMaskLayer;
}
public boolean isPointsUpdated() {
return mIsPointsUpdated;
}
}

View File

@@ -0,0 +1,40 @@
package com.mogo.map;
import com.mogo.map.overlay.IMogoOverlayManager;
import com.mogo.map.overlay.IMogoPolyline;
import com.mogo.map.overlay.MogoPolylineOptions;
/**
* @author congtaowang
* @since 2020-03-10
* <p>
* 描述
*/
public class MogoOverlayManager implements IMogoOverlayManager {
private MogoOverlayManager() {
// private constructor
}
private static final class InstanceHolder {
private static final MogoOverlayManager INSTANCE = new MogoOverlayManager();
}
public static MogoOverlayManager getInstance() {
return InstanceHolder.INSTANCE;
}
private Object readResolve() {
// 阻止反序列化,必须实现 Serializable 接口
return InstanceHolder.INSTANCE;
}
@Override
public IMogoPolyline addPolyline( MogoPolylineOptions options ) {
try {
return MogoMap.getInstance().getMogoMap().addPolyline( options );
} catch ( Exception e ) {
return null;
}
}
}

View File

@@ -47,13 +47,21 @@ dependencies {
implementation rootProject.ext.dependencies.rxandroid
if (Boolean.valueOf(RELEASE)) {
implementation rootProject.ext.dependencies.mogomap
implementation rootProject.ext.dependencies.mogomapapi
implementation rootProject.ext.dependencies.mogoutils
implementation rootProject.ext.dependencies.mogocommons
implementation rootProject.ext.dependencies.mogoserviceapi
implementation rootProject.ext.dependencies.modulecommon
implementation rootProject.ext.dependencies.moduleshare
} else {
implementation project(":libraries:mogo-map")
implementation project(":libraries:mogo-map-api")
implementation project(":foudations:mogo-utils")
api project(":foudations:mogo-commons")
implementation project(":foudations:mogo-commons")
implementation project(':services:mogo-service-api')
implementation project(':modules:mogo-module-common')
implementation project(':modules:mogo-module-share')
}
}

View File

@@ -1,33 +1,31 @@
package com.mogo.module.back;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.launcher.ARouter;
import com.alibaba.idst.nls.internal.utils.L;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.map.listener.IMogoMapListener;
import com.mogo.map.location.IMogoLocationListener;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.service.IMogoServiceApis;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.intent.IMogoIntentListener;
import com.mogo.service.intent.IMogoIntentManager;
import com.mogo.service.module.IMogoModuleLifecycle;
import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.service.module.ModuleType;
import com.mogo.utils.logger.Logger;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
/**
* @author congtaowang
* @since 2020-02-26
@@ -35,7 +33,12 @@ import java.util.Map;
* 描述
*/
@Route( path = BackToLauncherConst.MODULE_PATH )
public class BackToLauncherModuleProvider implements IMogoModuleProvider {
public class BackToLauncherModuleProvider implements IMogoModuleProvider, IMogoIntentListener {
private IMogoServiceApis mServiceApis;
private IMogoIntentManager mIntentManager;
public static final String COMMAND_BACK = "com.ileja.launcher.back";
private static final String TAG = "BackToLauncherModuleProvider";
@@ -98,54 +101,17 @@ public class BackToLauncherModuleProvider implements IMogoModuleProvider {
@Override
public void init( Context context ) {
BackToMainHomeManager.addMainHomeView();
// final Activity activity = getTopActivity(context.getPackageName());
// if ( activity instanceof FragmentActivity ) {
// Logger.d( TAG, "init." );
// FragmentManager fragmentManager = ( ( FragmentActivity ) activity ).getSupportFragmentManager();
// fragmentManager.beginTransaction()
// .add( new Back2LauncherFragment(), BackToLauncherConst.MODULE_NAME )
// .commitAllowingStateLoss();
// fragmentManager.executePendingTransactions();
// }
mServiceApis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation();
mIntentManager = mServiceApis.getIntentManagerApi();
mIntentManager.registerIntentListener( COMMAND_BACK, this );
BackToMainHomeManager.init( mServiceApis.getFragmentManagerApi() );
}
// /**
// * 获取当前运行的activity
// */
// private Activity getTopActivity(String process) {
// Log.i("activity", "[getTopActivity]");
// try {
// Class activityThreadClass = Class.forName("android.app.ActivityThread");
// Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null);
// Field activitiesField = activityThreadClass.getDeclaredField("mActivities");
// activitiesField.setAccessible(true);
// //16~18 HashMap
// //19~27 ArrayMap
// Map<Object, Object> activities;
// if ( Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
// activities = ( HashMap<Object, Object> ) activitiesField.get(activityThread);
// } else {
// activities = ( ArrayMap<Object, Object> ) activitiesField.get(activityThread);
// }
// if (activities.size() < 1) {
// return null;
// }
// for (Object activityRecord : activities.values()) {
// Class activityRecordClass = activityRecord.getClass();
// Field pausedField = activityRecordClass.getDeclaredField("paused");
// pausedField.setAccessible(true);
// if (!pausedField.getBoolean(activityRecord)) {
// Field activityField = activityRecordClass.getDeclaredField("activity");
// activityField.setAccessible(true);
// Activity activity = (Activity) activityField.get(activityRecord);
// if ( TextUtils.equals( process, activity.getPackageName() ) ) {
// return activity;
// }
// }
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// return null;
// }
@Override
public void onIntentReceived( String intentStr, Intent intent ) {
if ( COMMAND_BACK.equals( intentStr ) ) {
Logger.d( TAG, "received back to home command." );
BackToMainHomeManager.backToLauncher();
}
}
}

View File

@@ -14,15 +14,35 @@ import android.view.WindowManager;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.module.back.utils.Utils;
import com.mogo.module.back.utils.WindowManagerViewHelper;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.utils.logger.Logger;
public class BackToMainHomeManager {
private static View mBackView;
public static void addMainHomeView(){
Logger.d("BackToMainHomeManager","addMainHomeView");
if (mBackView != null)WindowManagerViewHelper.removeView(mBackView);
mBackView = LayoutInflater.from(AbsMogoApplication.getApp()).inflate(R.layout.mogo_module_back_home_back_layout, null);
private static IMogoFragmentManager mFragmentManager;
public static void init( IMogoFragmentManager manager ) {
mFragmentManager = manager;
}
public static void backToLauncher(){
Intent intent = new Intent();
intent.setAction( Intent.ACTION_MAIN );
intent.addCategory( Intent.CATEGORY_HOME );
intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
AbsMogoApplication.getApp().startActivity( intent );
if ( mFragmentManager != null ) {
mFragmentManager.clearAll();
}
}
public static void addMainHomeView() {
Logger.d( "BackToMainHomeManager", "addMainHomeView" );
if ( mBackView != null ) WindowManagerViewHelper.removeView( mBackView );
mBackView = LayoutInflater.from( AbsMogoApplication.getApp() ).inflate( R.layout.mogo_module_back_home_back_layout, null );
final Context context = mBackView.getContext();
if ( context == null || context.getApplicationContext() == null ) {
return;
@@ -31,32 +51,24 @@ public class BackToMainHomeManager {
if ( windowManager == null ) {
return;
}
mBackView.setOnClickListener(view -> {
if (Utils.isActivityExits("com.mogo.launcher","com.mogo.module.main.MainActivity")){
ComponentName cn = new ComponentName("com.mogo.launcher", "com.mogo.module.main.MainActivity") ;
Intent intent = new Intent() ;
intent.setComponent(cn) ;
if (!(AbsMogoApplication.getApp().getApplicationContext() instanceof Activity)) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
AbsMogoApplication.getApp().startActivity(intent);
}
});
mBackView.setOnClickListener( view -> {
backToLauncher();
} );
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.x = AbsMogoApplication.getApp().getResources().getDimensionPixelOffset(R.dimen.module_back_main_home_icon_left);
params.y = AbsMogoApplication.getApp().getResources().getDimensionPixelOffset(R.dimen.module_back_main_home_icon_top);
params.x = AbsMogoApplication.getApp().getResources().getDimensionPixelOffset( R.dimen.module_back_main_home_icon_left );
params.y = AbsMogoApplication.getApp().getResources().getDimensionPixelOffset( R.dimen.module_back_main_home_icon_top );
params.gravity = Gravity.LEFT | Gravity.CENTER;
params.type = getFitWindowParamsType();
params.format = PixelFormat.RGBA_8888;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
windowManager.addView( mBackView, params );
WindowManagerViewHelper.attachMovementEvent(mBackView,params);
WindowManagerViewHelper.attachMovementEvent( mBackView, params );
}
public static void removeMainHomeView(){
WindowManagerViewHelper.removeView(mBackView);
public static void removeMainHomeView() {
WindowManagerViewHelper.removeView( mBackView );
}
private static int getFitWindowParamsType() {

View File

@@ -7,13 +7,13 @@ import android.content.pm.ResolveInfo;
import com.mogo.commons.AbsMogoApplication;
public class Utils {
public static boolean isActivityExits(String packageName,String classStr){
public static boolean isActivityExits( String packageName, String classStr ) {
Intent intent = new Intent();
intent.setClassName(packageName, classStr);
ResolveInfo resolveInfo = AbsMogoApplication.getApp().getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
if(resolveInfo != null) {
intent.setClassName( packageName, classStr );
ResolveInfo resolveInfo = AbsMogoApplication.getApp().getPackageManager().resolveActivity( intent, PackageManager.MATCH_DEFAULT_ONLY );
if ( resolveInfo != null ) {
return true;
}else{
} else {
return false;
}
}

View File

@@ -11,6 +11,8 @@ public class MarkerCarInfo implements Serializable {
private String carBrandLogoUrl;
private String carTypeName;
private int carType;
private CarLive carLive;
public String getCarBrandLogoUrl() {
if (TextUtils.isEmpty(carBrandLogoUrl)) {
@@ -34,11 +36,61 @@ public class MarkerCarInfo implements Serializable {
this.carTypeName = carTypeName;
}
@Override
public String toString() {
return "MarkerCarInfo{" +
"carBrandLogoUrl='" + carBrandLogoUrl + '\'' +
", carTypeName='" + carTypeName + '\'' +
'}';
public int getCarType() {
return carType;
}
public void setCarType(int carType) {
this.carType = carType;
}
public CarLive getCarLive() {
return carLive;
}
public void setCarLive(CarLive carLive) {
this.carLive = carLive;
}
class CarLive implements Serializable {
//rtmp视频直播地址rtmp://
private String videoUrl;
//直播频道【直播心跳接口参数】C_1
private String videoChannel;
//直播源sn【直播心跳接口参数】XTCBA90740400625
private String videoSn;
public String getVideoUrl() {
return videoUrl;
}
public void setVideoUrl(String videoUrl) {
this.videoUrl = videoUrl;
}
public String getVideoChannel() {
return videoChannel;
}
public void setVideoChannel(String videoChannel) {
this.videoChannel = videoChannel;
}
public String getVideoSn() {
return videoSn;
}
public void setVideoSn(String videoSn) {
this.videoSn = videoSn;
}
@Override
public String toString() {
return "CarLive{" +
"videoUrl='" + videoUrl + '\'' +
", videoChannel='" + videoChannel + '\'' +
", videoSn='" + videoSn + '\'' +
'}';
}
}
}

View File

@@ -26,4 +26,10 @@ public interface MarkerPoiTypeEnum {
public String FOURS_PONDING = "10008";
//超市打折
public String FOURS_SHOP_FREE = "10009";
//浓雾
public String FOURS_FOG = "10010";
//结冰
public String FOURS_ICE = "10011";
//停车场
public String FOURS_PARKING = "10012";
}

View File

@@ -16,6 +16,11 @@ public class MarkerUserInfo implements Serializable {
private String gender;//gender": "男也可以012根据实际库存返回即可
private Integer age;// 年龄段,可以为空,与车聊聊一致
// TODO V2X临时字段接口出好后进行修改
private String lastActiveweekAvgscore;//末次活跃周驾驶行为平均得分
private String safeLabel;//车辆安全标签
private int safeLabelType;//1老司机 2安全驾驶 3危险驾驶
public void setAge(Integer age) {
this.age = age;
}
@@ -150,16 +155,46 @@ public class MarkerUserInfo implements Serializable {
this.userName = userName;
}
public void setUserId(long userId) {
this.userId = userId;
}
public String getLastActiveweekAvgscore() {
return lastActiveweekAvgscore;
}
public void setLastActiveweekAvgscore(String lastActiveweekAvgscore) {
this.lastActiveweekAvgscore = lastActiveweekAvgscore;
}
public String getSafeLabel() {
return safeLabel;
}
public void setSafeLabel(String safeLabel) {
this.safeLabel = safeLabel;
}
public int getSafeLabelType() {
return safeLabelType;
}
public void setSafeLabelType(int safeLabelType) {
this.safeLabelType = safeLabelType;
}
@Override
public String toString() {
return "MarkerUserInfo{" +
"age=" + age +
", gender='" + gender + '\'' +
", sn='" + sn + '\'' +
", userHead='" + userHead + '\'' +
"sn='" + sn + '\'' +
", userId=" + userId +
", userName='" + userName + '\'' +
", userHead='" + userHead + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
", lastActiveweekAvgscore='" + lastActiveweekAvgscore + '\'' +
", safeLabel='" + safeLabel + '\'' +
", safeLabelType=" + safeLabelType +
'}';
}
}

View File

@@ -50,9 +50,9 @@ import java.util.Map;
* <p>
* 描述
*/
public class EntranceFragment extends MvpFragment<EntranceView, EntrancePresenter>
implements EntranceView,
IMogoNaviListener, IMogoMapListener {
public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresenter >
implements EntranceView,
IMogoNaviListener, IMogoMapListener {
private static final String TAG = "EntranceFragment";
@@ -100,37 +100,37 @@ public class EntranceFragment extends MvpFragment<EntranceView, EntrancePresente
@Override
protected void initViews() {
mMogoFragmentManager = (IMogoFragmentManager) ARouter.getInstance()
.build(MogoServicePaths.PATH_FRAGMENT_MANAGER)
.navigation();
mMogoAddressManager = (IMogoAddressManager) ARouter.getInstance()
.build(MogoServicePaths.PATH_ADDRESS_MANAGER)
.navigation();
mCommonAddress = findViewById(R.id.module_entrance_id_common_address);
mSearch = findViewById(R.id.module_entrance_id_search);
mSearch.setOnClickListener(view -> {
mSearchProvider = (IMogoModuleProvider) ARouter.getInstance()
.build(MogoModulePaths.PATH_MODULE_SEARCH)
mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance()
.build( MogoServicePaths.PATH_FRAGMENT_MANAGER )
.navigation();
mMogoAddressManager = ( IMogoAddressManager ) ARouter.getInstance()
.build( MogoServicePaths.PATH_ADDRESS_MANAGER )
.navigation();
final Fragment fragment = mSearchProvider.createFragment(getContext(), null);
mMogoFragmentManager.push(new FragmentDescriptor.Builder().fragment(fragment)
.tag(MogoModulePaths.PATH_FRAGMENT_SEARCH)
.notifyMainModule(true)
.build());
});
mHome = findViewById(R.id.module_entrance_id_home);
mHome.setOnClickListener(view -> {
mCommonAddress = findViewById( R.id.module_entrance_id_common_address );
mSearch = findViewById( R.id.module_entrance_id_search );
mSearch.setOnClickListener( view -> {
mSearchProvider = ( IMogoModuleProvider ) ARouter.getInstance()
.build( MogoModulePaths.PATH_MODULE_SEARCH )
.navigation();
final Fragment fragment = mSearchProvider.createFragment( getContext(), null );
mMogoFragmentManager.push( new FragmentDescriptor.Builder().fragment( fragment )
.tag( MogoModulePaths.PATH_FRAGMENT_SEARCH )
.notifyMainModule( true )
.build() );
} );
mHome = findViewById( R.id.module_entrance_id_home );
mHome.setOnClickListener( view -> {
mMogoAddressManager.goHome();
});
} );
mCompany = findViewById(R.id.module_entrance_id_company);
mCompany.setOnClickListener(view -> {
mCompany = findViewById( R.id.module_entrance_id_company );
mCompany.setOnClickListener( view -> {
mMogoAddressManager.goCompany();
});
} );
mUploadRoadCondition = findViewById( R.id.module_entrance_id_upload_road_condition );
mUploadRoadCondition.setOnClickListener( view -> {
@@ -141,78 +141,79 @@ public class EntranceFragment extends MvpFragment<EntranceView, EntrancePresente
mVRMode.setOnClickListener( view -> {
} );
mMove2CurrentLocation = findViewById(R.id.module_entrance_id_move2_current_location);
mMove2CurrentLocation.setOnClickListener(view -> {
mMove2CurrentLocation = findViewById( R.id.module_entrance_id_move2_current_location );
mMove2CurrentLocation.setOnClickListener( view -> {
final MogoLocation location = mMogoLocationClient.getLastKnowLocation();
if (location != null) {
mMogoStatusManager.setUserInteractionStatus(TAG, true, false);
mMApUIController.changeZoom(16.0f);
mMogoStatusManager.setUserInteractionStatus(TAG, true, false);
if ( location != null ) {
mMogoStatusManager.setUserInteractionStatus( TAG, true, false );
mMApUIController.changeZoom( 16.0f );
mMogoStatusManager.setUserInteractionStatus( TAG, true, false );
mMApUIController.recoverLockMode();
}
});
} );
mNaviInfo = findViewById(R.id.module_entrance_id_navi_info_panel);
mExitNavi = findViewById(R.id.module_entrance_id_exit_navi);
mExitNavi.setOnClickListener(view -> {
if (mMogoNavi != null) {
mNaviInfo = findViewById( R.id.module_entrance_id_navi_info_panel );
mExitNavi = findViewById( R.id.module_entrance_id_exit_navi );
mExitNavi.setOnClickListener( view -> {
if ( mMogoNavi != null ) {
//if ( mIsLock ) {
NaviNoticeDialog naviNoticeDialog = new NaviNoticeDialog(getContext());
NaviNoticeDialog naviNoticeDialog = new NaviNoticeDialog( getContext() );
naviNoticeDialog.show();
//} else {
// mMApUIController.recoverLockMode();
//}
}
});
} );
ivMode = findViewById(R.id.module_ext_id_north);
ivMode.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
if (ivMode.isSelected()) {
mMApUIController.changeMapMode(EnumMapUI.CarUp_2D);
ivMode = findViewById( R.id.module_ext_id_north );
ivMode.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick( View v ) {
if ( ivMode.isSelected() ) {
mMApUIController.changeMapMode( EnumMapUI.CarUp_2D );
} else {
mMApUIController.changeMapMode(EnumMapUI.NorthUP_2D);
mMApUIController.changeMapMode( EnumMapUI.NorthUP_2D );
}
ivMode.setSelected(!ivMode.isSelected());
ivMode.setSelected( !ivMode.isSelected() );
ivMode.setText(
getString(ivMode.isSelected() ? R.string.mode_car_up : R.string.mode_north_up));
getString( ivMode.isSelected() ? R.string.mode_car_up : R.string.mode_north_up ) );
}
});
} );
mSpeedLimit = findViewById(R.id.module_entrance_id_speed_limit_container);
mSpeedLimitValue = findViewById(R.id.module_entrance_id_speed_limit_value);
mSpeedLimitUnit = findViewById(R.id.module_entrance_id_speed_limit_unit);
mSpeedLimit = findViewById( R.id.module_entrance_id_speed_limit_container );
mSpeedLimitValue = findViewById( R.id.module_entrance_id_speed_limit_value );
mSpeedLimitUnit = findViewById( R.id.module_entrance_id_speed_limit_unit );
}
@NonNull
@Override
protected EntrancePresenter createPresenter() {
return new EntrancePresenter(getContext(), this);
return new EntrancePresenter( getContext(), this );
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mService = (IMogoMapService) ARouter.getInstance()
.build(MogoServicePaths.PATH_SERVICES_MAP)
.navigation(getContext());
mMogoRegisterCenter = (IMogoRegisterCenter) ARouter.getInstance()
.build(MogoServicePaths.PATH_REGISTER_CENTER)
.navigation(getContext());
public void onActivityCreated( @Nullable Bundle savedInstanceState ) {
super.onActivityCreated( savedInstanceState );
mService = ( IMogoMapService ) ARouter.getInstance()
.build( MogoServicePaths.PATH_SERVICES_MAP )
.navigation( getContext() );
mMogoRegisterCenter = ( IMogoRegisterCenter ) ARouter.getInstance()
.build( MogoServicePaths.PATH_REGISTER_CENTER )
.navigation( getContext() );
mMApUIController = mService.getMapUIController();
mMogoLocationClient = mService.getSingletonLocationClient(getContext());
mMogoNavi = mService.getNavi(getContext());
mAnalytics = (IMogoAnalytics) ARouter.getInstance()
.build(MogoServicePaths.PATH_UTILS_ANALYTICS)
.navigation(getContext());
mMogoStatusManager = (IMogoStatusManager) ARouter.getInstance()
.build(MogoServicePaths.PATH_STATUS_MANAGER)
.navigation(getContext());
mMogoLocationClient = mService.getSingletonLocationClient( getContext() );
mMogoNavi = mService.getNavi( getContext() );
mAnalytics = ( IMogoAnalytics ) ARouter.getInstance()
.build( MogoServicePaths.PATH_UTILS_ANALYTICS )
.navigation( getContext() );
mMogoStatusManager = ( IMogoStatusManager ) ARouter.getInstance()
.build( MogoServicePaths.PATH_STATUS_MANAGER )
.navigation( getContext() );
mMogoRegisterCenter.registerMogoNaviListener(ExtensionsModuleConst.TYPE_ENTRANCE, this);
mMogoRegisterCenter.registerMogoMapListener(ExtensionsModuleConst.TYPE_ENTRANCE, this);
mMogoRegisterCenter.registerMogoNaviListener( ExtensionsModuleConst.TYPE_ENTRANCE, this );
mMogoRegisterCenter.registerMogoMapListener( ExtensionsModuleConst.TYPE_ENTRANCE, this );
mMogoMarkerManager = mService.getMarkerManager(getContext());
mMogoMarkerManager = mService.getMarkerManager( getContext() );
}
@Override
@@ -224,30 +225,30 @@ public class EntranceFragment extends MvpFragment<EntranceView, EntrancePresente
}
@Override
public void onNaviInfoUpdate(MogoNaviInfo naviinfo) {
if (naviinfo == null) {
public void onNaviInfoUpdate( MogoNaviInfo naviinfo ) {
if ( naviinfo == null ) {
return;
}
mNaviInfo.notifyChanged(naviinfo);
mNaviInfo.notifyChanged( naviinfo );
}
@Override
public void onStartNavi() {
mCommonAddress.setVisibility(View.GONE);
mNaviInfo.setVisibility(View.VISIBLE);
ivMode.setVisibility(View.VISIBLE);
mExitNavi.setVisibility(View.VISIBLE);
mMApUIController.setPointToCenter(0.675926, 0.77552);
mCommonAddress.setVisibility( View.GONE );
mNaviInfo.setVisibility( View.VISIBLE );
ivMode.setVisibility( View.VISIBLE );
mExitNavi.setVisibility( View.VISIBLE );
mMApUIController.setPointToCenter( 0.675926, 0.77552 );
}
@Override
public void onStopNavi() {
mCommonAddress.setVisibility(View.VISIBLE);
mNaviInfo.setVisibility(View.GONE);
ivMode.setVisibility(View.GONE);
mExitNavi.setVisibility(View.GONE);
mSpeedLimit.setVisibility(View.GONE);
mMApUIController.setPointToCenter(0.66145, 0.590688);
mCommonAddress.setVisibility( View.VISIBLE );
mNaviInfo.setVisibility( View.GONE );
ivMode.setVisibility( View.GONE );
mExitNavi.setVisibility( View.GONE );
mSpeedLimit.setVisibility( View.GONE );
mMApUIController.setPointToCenter( 0.66145, 0.590688 );
}
@Override
@@ -259,16 +260,16 @@ public class EntranceFragment extends MvpFragment<EntranceView, EntrancePresente
}
@Override
public void onUpdateTraffic(MogoTraffic traffic) {
if (traffic == null) {
public void onUpdateTraffic( MogoTraffic traffic ) {
if ( traffic == null ) {
return;
}
if (traffic.getSpeedLimit() <= 0) {
mSpeedLimit.setVisibility(View.INVISIBLE);
mSpeedLimitValue.setText("--");
if ( traffic.getSpeedLimit() <= 0 ) {
mSpeedLimit.setVisibility( View.INVISIBLE );
mSpeedLimitValue.setText( "--" );
} else {
mSpeedLimit.setVisibility(View.VISIBLE);
mSpeedLimitValue.setText(String.valueOf(traffic.getSpeedLimit()));
mSpeedLimit.setVisibility( View.VISIBLE );
mSpeedLimitValue.setText( String.valueOf( traffic.getSpeedLimit() ) );
}
}
@@ -278,43 +279,43 @@ public class EntranceFragment extends MvpFragment<EntranceView, EntrancePresente
}
@Override
public void onTouch(MotionEvent motionEvent) {
public void onTouch( MotionEvent motionEvent ) {
}
@Override
public void onPOIClick(MogoPoi poi) {
public void onPOIClick( MogoPoi poi ) {
}
@Override
public void onMapClick(MogoLatLng latLng) {
public void onMapClick( MogoLatLng latLng ) {
}
@Override
public void onLockMap(boolean isLock) {
public void onLockMap( boolean isLock ) {
mIsLock = isLock;
if (isLock) {
mExitNavi.setText(R.string.module_ext_str_exit_navi);
if ( isLock ) {
mExitNavi.setText( R.string.module_ext_str_exit_navi );
} else {
mExitNavi.setText(R.string.module_ext_str_exit_navi);
mExitNavi.setText( R.string.module_ext_str_exit_navi );
}
}
@Override
public void onMapModeChanged(EnumMapUI ui) {
public void onMapModeChanged( EnumMapUI ui ) {
}
@Override
public void onMapChanged(MogoLatLng latLng, float zoom, float tilt, float bearing) {
public void onMapChanged( MogoLatLng latLng, float zoom, float tilt, float bearing ) {
}
private void traceData(String from) {
Map<String, Object> properties = new HashMap<>();
properties.put("from", from);
mAnalytics.track("Launcher_Share_Click", properties);
private void traceData( String from ) {
Map< String, Object > properties = new HashMap<>();
properties.put( "from", from );
mAnalytics.track( "Launcher_Share_Click", properties );
}
}

View File

@@ -40,6 +40,7 @@ import com.mogo.service.intent.IMogoIntentListener;
import com.mogo.service.intent.IMogoIntentManager;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.utils.logger.Logger;
import org.json.JSONException;
@@ -65,6 +66,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
private MogoModulesHandler mMogoModuleHandler;
private IMogoCardManager mMogoCardManager;
private IMogoFragmentManager mMogoFragmentManager;
private IMogoStatusManager mMogoStatusManager;
private OrientedViewPager mCardsContainer;
private VerticalStackTransformer mTransformer;
@@ -100,73 +102,66 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
mCardsContainer = findViewById( R.id.module_main_id_cards_container );
mCardsContainer.setOrientation( OrientedViewPager.Orientation.HORIZONTAL );
mTransformer = new VerticalStackTransformer( this );
mCardsContainer.setOnPageChangeListener(
mOnPageChangeListener = new OnPageChangeListenerAdapter() {
private boolean mIsLast = true;
private boolean mCardFlipStatus = false;
mCardsContainer.setOnPageChangeListener( 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 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 );
}
} else if ( state == ViewPager.SCROLL_STATE_IDLE ) {
mCardFlipStatus = false;
mTransformer.resetOffsetScroll();
}
@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();
}
int cardSize = mCardModulesAdapter.getCount();
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" );
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" );
}
@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 );
@@ -261,6 +256,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
} );
mMogoIntentManager = mServiceApis.getIntentManagerApi();
mMogoStatusManager = mServiceApis.getStatusManagerApi();
registerVoiceCmd();
Log.i( "timer", "cost " + ( System.currentTimeMillis() - start ) + "ms" );
}
@@ -324,7 +320,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
@Override
public boolean onMarkerClicked( IMogoMarker marker ) {
switch2Card( marker.getOwner() );
switch2Card( marker.getOwner(), false );
if ( mMogoModuleHandler != null ) {
mMogoModuleHandler.onMarkerClicked( marker );
}
@@ -332,17 +328,23 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
}
@Override
public void switch2Card( String cardType ) {
if ( mCardModulesAdapter != null ) {
public void switch2Card( String cardType, boolean lockCar ) {
if ( mCardModulesAdapter == null ) {
return;
}
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 );
}
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 );
}
if ( lockCar ) {
mMogoStatusManager.setUserInteractionStatus( TAG, true, false );
mMogoMapUIController.recoverLockMode();
}
}

View File

@@ -67,11 +67,11 @@ public class MainPresenter extends Presenter< MainView > {
@Override
public void onCreate( @NonNull LifecycleOwner owner ) {
super.onCreate( owner );
CardSwitchLiveData.getInstance().observeForever( to -> {
if ( TextUtils.isEmpty( to ) ) {
CardSwitchLiveData.getInstance().observeForever( cardInfo -> {
if ( TextUtils.isEmpty( cardInfo.mCardName ) ) {
return;
}
mView.switch2Card( to );
mView.switch2Card( cardInfo.mCardName, true );
} );
mAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() );
mCardStartShowTime = System.currentTimeMillis();

View File

@@ -15,7 +15,7 @@ public interface MainView extends IView {
*
* @param cardType
*/
void switch2Card( String cardType );
void switch2Card( String cardType, boolean lockCar );
/**
* 加载卡片

View File

@@ -3,6 +3,7 @@ package com.mogo.module.main;
import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.module.main.livedata.CardInfo;
import com.mogo.module.main.livedata.CardSwitchLiveData;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.cardmanager.IMogoCardChangedListener;
@@ -25,7 +26,7 @@ public class MogoCardManager implements IMogoCardManager {
@Override
public void switch2( String cardType ) {
CardSwitchLiveData.getInstance().postValue( cardType );
CardSwitchLiveData.getInstance().postValue( new CardInfo( cardType, false ) );
}
@Override
@@ -51,6 +52,11 @@ public class MogoCardManager implements IMogoCardManager {
}
}
@Override
public void switch2( String cardType, boolean lockCar ) {
CardSwitchLiveData.getInstance().postValue( new CardInfo( cardType, lockCar ) );
}
@Override
public void init( Context context ) {

View File

@@ -148,7 +148,8 @@ public class MogoModulesManager implements MogoModulesHandler,
providers.add( provider );
}
}
return sort( providers );
return providers;
// return sort( providers ); v2.0.2暂不支持变顺序
}
private List< IMogoModuleProvider > sort( List< IMogoModuleProvider > modules ) {

View File

@@ -0,0 +1,49 @@
package com.mogo.module.main.livedata;
import android.os.Parcel;
import android.os.Parcelable;
/**
* @author congtaowang
* @since 2020-03-09
* <p>
* 描述
*/
public class CardInfo implements Parcelable {
public String mCardName;
public boolean mLockCar;
public CardInfo( String cardName, boolean lockCar ) {
this.mCardName = cardName;
this.mLockCar = lockCar;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel( Parcel dest, int flags ) {
dest.writeString( this.mCardName );
dest.writeByte( this.mLockCar ? ( byte ) 1 : ( byte ) 0 );
}
protected CardInfo( Parcel in ) {
this.mCardName = in.readString();
this.mLockCar = in.readByte() != 0;
}
public static final Parcelable.Creator< CardInfo > CREATOR = new Parcelable.Creator< CardInfo >() {
@Override
public CardInfo createFromParcel( Parcel source ) {
return new CardInfo( source );
}
@Override
public CardInfo[] newArray( int size ) {
return new CardInfo[size];
}
};
}

View File

@@ -8,7 +8,7 @@ import androidx.lifecycle.MutableLiveData;
* <p>
* 切换卡片
*/
public class CardSwitchLiveData extends MutableLiveData< String > {
public class CardSwitchLiveData extends MutableLiveData< CardInfo > {
private CardSwitchLiveData() {
// private constructor

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
@@ -9,9 +8,7 @@
<FrameLayout
android:id="@+id/module_main_id_map_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintLeft_toRightOf="@+id/module_main_id_apps_fragment_container"
app:layout_constraintRight_toRightOf="parent" />
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/module_main_id_map_top_shadow_frame"
@@ -27,68 +24,56 @@
android:background="@drawable/module_main_dw_left_frame_bkg"
android:visibility="invisible" />
<LinearLayout
<FrameLayout
android:id="@+id/module_main_id_header_fragment_container"
android:layout_width="match_parent"
android:layout_height="@dimen/module_ext_height" />
<FrameLayout
android:id="@+id/module_main_card_container_frame"
android:layout_width="@dimen/module_main_card_container_width"
android:layout_height="match_parent"
android:layout_below="@+id/module_main_id_header_fragment_container"
android:layout_marginLeft="@dimen/module_main_card_container_marginLeft"
android:layout_marginTop="@dimen/module_main_card_container_marginTop">
<com.mogo.module.main.cards.OrientedViewPager
android:id="@+id/module_main_id_cards_container"
android:layout_width="match_parent"
android:layout_height="@dimen/module_main_card_container_height"
android:layout_marginBottom="@dimen/module_main_card_container_marginBottom"
android:clipToPadding="false"
android:overScrollMode="never"
android:paddingBottom="@dimen/module_main_card_container_paddingBottom" />
<!-- 应用入口-->
<FrameLayout
android:id="@+id/module_main_id_apps_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
<FrameLayout
android:id="@+id/module_main_id_card_cover_up_bottom"
android:layout_width="match_parent"
android:layout_height="20px"
android:layout_marginLeft="15px"
android:layout_marginTop="@dimen/module_main_card_cover_up_margin"
android:layout_marginRight="15px"
android:background="@drawable/module_main_card_cover_up_bottom"
android:visibility="gone" />
</FrameLayout>
<!--快捷操作浮层-->
<FrameLayout
android:id="@+id/module_main_id_entrance_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- 小智语音-->
<FrameLayout
android:id="@+id/module_main_id_header_fragment_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_marginTop="@dimen/module_main_card_container_marginTop"
android:layout_height="match_parent">
<!-- 卡片-->
<FrameLayout
android:layout_width="@dimen/module_main_card_container_width"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/module_main_card_container_marginLeft">
<com.mogo.module.main.cards.OrientedViewPager
android:id="@+id/module_main_id_cards_container"
android:layout_width="match_parent"
android:layout_height="@dimen/module_main_card_container_height"
android:layout_marginBottom="@dimen/module_main_card_container_marginBottom"
android:clipToPadding="false"
android:overScrollMode="never"
android:paddingBottom="@dimen/module_main_card_container_paddingBottom" />
<!-- 应用入口-->
<FrameLayout
android:id="@+id/module_main_id_apps_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent">
</FrameLayout>
<FrameLayout
android:id="@+id/module_main_id_card_cover_up_bottom"
android:layout_width="match_parent"
android:layout_height="20px"
android:visibility="gone"
android:layout_marginTop="@dimen/module_main_card_cover_up_margin"
android:layout_marginLeft="15px"
android:layout_marginRight="15px"
android:background="@drawable/module_main_card_cover_up_bottom"/>
</FrameLayout>
<!--快捷操作浮层-->
<FrameLayout
android:id="@+id/module_main_id_entrance_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
android:layout_below="@+id/module_main_id_header_fragment_container"
android:layout_marginTop="@dimen/module_main_card_container_marginTop"
android:layout_toRightOf="@+id/module_main_card_container_frame" />
<!-- 浮层-->
<FrameLayout
@@ -104,6 +89,6 @@
<FrameLayout
android:id="@+id/module_main_id_cover_up"
android:layout_width="match_parent"
android:background="@drawable/module_main_launcher_bg"
android:layout_height="match_parent"/>
</FrameLayout>
android:layout_height="match_parent"
android:background="@drawable/module_main_launcher_bg" />
</RelativeLayout>

View File

@@ -22,13 +22,12 @@ import com.mogo.service.statusmanager.StatusDescriptor;
* <p>
* 地图图层,地图操作都在这个图层完成
*/
public class MapFragment extends MvpFragment< MapView, MapPresenter > implements MapView, IMogoStatusChangedListener {
public class MapFragment extends MvpFragment< MapView, MapPresenter > implements MapView {
private static final String TAG = "MapFragment";
private MogoMapView mMogoMapView;
private IMogoMap mMogoMap;
private IMogoStatusManager mMogoStatusManager;
private boolean mIsControllerByOthersStatus = false;
@@ -67,8 +66,6 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements
// mMogoMapView.onCreate( savedInstanceState );
//}
initMapView();
mMogoStatusManager = ( IMogoStatusManager ) ARouter.getInstance().build( MogoServicePaths.PATH_STATUS_MANAGER ).navigation( getContext() );
mMogoStatusManager.registerStatusChangedListener( TAG, StatusDescriptor.APP_LIST_UI, this );
}
@Override
@@ -134,18 +131,6 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements
return mMogoMap.getUIController();
}
@Override
public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) {
if ( descriptor == StatusDescriptor.APP_LIST_UI ) {
mIsControllerByOthersStatus = isTrue;
if ( isTrue ) {
mMogoMapView.onPause();
} else {
mMogoMapView.onResume();
}
}
}
@Override
public void onDestroyView() {
super.onDestroyView();

View File

@@ -29,6 +29,11 @@ android {
}
}
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
dependencies {

View File

@@ -10,6 +10,7 @@ import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.entity.MarkerResponse;
import com.mogo.module.common.entity.MarkerShowEntity;
import com.mogo.module.service.marker.MapMarkerManager;
import com.mogo.service.IMogoServiceApis;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.cardmanager.IMogoCardManager;
@@ -28,6 +29,7 @@ import com.mogo.service.statusmanager.IMogoStatusManager;
public class MarkerServiceHandler {
private static final String TAG = "MarkerServiceHandler";
private static IMogoServiceApis mApis;
private static IMogoMapService mMapService;
private static IMogoMarkerManager mMarkerManager;
@@ -44,22 +46,22 @@ public class MarkerServiceHandler {
private static MapMarkerManager mMapMarkerManager;
public static void init( final Context context ) {
mApis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation( context );
mMapService = mApis.getMapServiceApi();
mImageloader = mApis.getImageLoaderApi();
mMogoStatusManager = mApis.getStatusManagerApi();
mMogoSocketManager = mApis.getSocketManagerApi( context );
mMogoCardManager = mApis.getCardManagerApi();
mMogoAnalytics = mApis.getAnalyticsApi();
public static void init(final Context context) {
mMapService = (IMogoMapService) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICES_MAP).navigation(context);
mImageloader = (IMogoImageloader) ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_IMAGE_LOADER).navigation(context);
mMogoStatusManager = (IMogoStatusManager) ARouter.getInstance().build(MogoServicePaths.PATH_STATUS_MANAGER).navigation(context);
mMogoSocketManager = (IMogoSocketManager) ARouter.getInstance().build(MogoServicePaths.PATH_SOCKET_MANAGER).navigation();
mMogoCardManager = (IMogoCardManager) ARouter.getInstance().build(MogoServicePaths.PATH_CARD_MANAGER).navigation();
mMogoAnalytics = (IMogoAnalytics) ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_ANALYTICS).navigation();
mMarkerManager = mMapService.getMarkerManager(context);
mNavi = mMapService.getNavi(context);
mMarkerManager = mMapService.getMarkerManager( context );
mNavi = mMapService.getNavi( context );
mMapUIController = mMapService.getMapUIController();
mLocationClient = mMapService.getSingletonLocationClient(context);
mLocationClient = mMapService.getSingletonLocationClient( context );
mMapMarkerManager = MapMarkerManager.getInstance(context);
mMapMarkerManager.init(context);
mMapMarkerManager = MapMarkerManager.getInstance();
mMapMarkerManager.init( context );
}
public static IMogoMapService getMapService() {
@@ -112,30 +114,33 @@ public class MarkerServiceHandler {
/**
* 绘制Marker
* 建议使用
*
* @see MapMarkerManager#drawMapMarker(MarkerResponse)
*/
@Deprecated
public static void drawMapMarker(MarkerResponse response) {
getMapMarkerManager().drawMapMarker(response);
public static void drawMapMarker( MarkerResponse response ) {
getMapMarkerManager().drawMapMarker( response );
}
/**
* 绘制Marker
* 建议使用
*
* @see MapMarkerManager#drawMapMarker(MarkerShowEntity)
*/
@Deprecated
public static void drawMapMarker(MarkerShowEntity markerShowEntity) {
getMapMarkerManager().drawMapMarker(markerShowEntity);
public static void drawMapMarker( MarkerShowEntity markerShowEntity ) {
getMapMarkerManager().drawMapMarker( markerShowEntity );
}
/**
* 对指定类型高亮处理
* 建议使用
* @see MapMarkerManager#highlightedMarker(String,boolean)
*
* @see MapMarkerManager#highlightedMarker(String, boolean)
*/
@Deprecated
public static void highlightedMarker(String typeTag) {
getMapMarkerManager().highlightedMarker(typeTag,false);
public static void highlightedMarker( String typeTag ) {
getMapMarkerManager().highlightedMarker( typeTag, false );
}
}

View File

@@ -7,6 +7,7 @@ import android.content.IntentFilter;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.Trace;
import android.text.TextUtils;
import android.view.MotionEvent;
@@ -143,11 +144,7 @@ public class MogoServices implements IMogoMapListener,
mRefreshRemainingTime -= ServiceConst.DECREASE_INTERVAL;
if ( mRefreshRemainingTime == 0 ) {
Logger.d( TAG, "move to center and refresh data." );
mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, false );
mUiController.recoverLockMode();
mStatusManager.setUserInteractionStatus( TAG, true, false );
mUiController.changeZoom( 16.0f );
notifyRefreshData( mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback );
invokeAutoRefresh();
} else {
mHandler.sendEmptyMessageDelayed( msg.what, ServiceConst.DECREASE_INTERVAL );
}
@@ -158,11 +155,21 @@ public class MogoServices implements IMogoMapListener,
}
if ( mLoopRequest ) {
Logger.d( TAG, "补偿刷新触发" );
notifyRefreshData( mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback );
invokeAutoRefresh();
}
break;
}
}
/**
* 自动刷新锁车、缩放比例16、半径 2KM
*/
private void invokeAutoRefresh() {
mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, false );
mUiController.setLockZoom( ServiceConst.DEFAULT_LOCK_CAR_ZOOM_LEVEL );
mUiController.recoverLockMode();
notifyRefreshData( mLastAutoRefreshLocation, ServiceConst.DEFAULT_AUTO_REFRESH_DATA_RADIUS, mAutoRefreshCallback );
}
};
private Context mContext;
@@ -246,6 +253,7 @@ public class MogoServices implements IMogoMapListener,
registerCenter.registerMogoLocationListener( ServiceConst.TYPE, this );
registerCenter.registerMogoNaviListener( ServiceConst.TYPE, this );
registerCenter.registerMogoMapListener( ServiceConst.TYPE, this );
registerCenter.registerMogoAimlessModeListener( ServiceConst.TYPE, this );
mIntentManager = ( IMogoIntentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_INTENT_MANAGER ).navigation( context );
mIntentManager.registerIntentListener( MogoReceiver.ACTIION_ADAS, this );
@@ -454,6 +462,7 @@ public class MogoServices implements IMogoMapListener,
*/
private boolean invokeRefreshWhenTranslationByUser( MogoLatLng latLng ) {
try {
Trace.beginSection( "timer.invokeRefreshWhenTranslationByUser" );
float factor = 0.0f;
if ( mIsVertical ) {
factor = getMapCameraFactWidth();
@@ -465,6 +474,7 @@ public class MogoServices implements IMogoMapListener,
}
Logger.d( TAG, "invokeRefreshWhenTranslationByUsermLastCustomRefreshCenterLocation = %s, latLng = %s", mLastCustomRefreshCenterLocation, latLng );
float distance = Utils.calculateLineDistance( latLng, mLastCustomRefreshCenterLocation );
Trace.endSection();
return distance > factor;
} catch ( Exception e ) {
Logger.e( TAG, e, "warming. " );
@@ -500,7 +510,7 @@ public class MogoServices implements IMogoMapListener,
mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, false );
mUiController.recoverLockMode();
mStatusManager.setUserInteractionStatus( TAG, true, false );
mUiController.changeZoom( 16.0f );
mUiController.changeZoom( ServiceConst.DEFAULT_ZOOM_LEVEL );
mLastAutoRefreshLocation = point;
notifyRefreshData( mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback );
}
@@ -548,8 +558,8 @@ public class MogoServices implements IMogoMapListener,
case USER_INTERACTED:
if ( isTrue && !mRefreshRemainingTimeStatus ) {
mRefreshRemainingTimeStatus = true;
mRefreshRemainingTime += mAutoRefreshStrategy.getInterruptInterval();
Logger.i( TAG, "用户状态改变,自动刷新时间延时,%s ms后自动刷新", mRefreshRemainingTime );
mRefreshRemainingTime = ServiceConst.DEFAULT_AUTO_REFRESH_WHEN_INTERRUPT;
Logger.i( TAG, "用户状态改变,下次刷新时间%ss后", mRefreshRemainingTime );
}
break;
case SEARCH_UI:
@@ -636,7 +646,7 @@ public class MogoServices implements IMogoMapListener,
return;
}
int status = intent.getIntExtra( MogoReceiver.PARAM_ADAS_STATUS, 0 );
mUiController.setLockZoom( status == 1 ? 15 : 16 );
mUiController.setLockZoom( status == 1 ? 15 : ServiceConst.DEFAULT_LOCK_CAR_ZOOM_LEVEL );
mStatusManager.setADASUIShow( ServiceConst.TYPE, status == 1 );
mUiController.showMyLocation( true );
} else if ( Intent.ACTION_POWER_CONNECTED.equals( command ) ) {

View File

@@ -62,4 +62,30 @@ public class ServiceConst {
*/
public static final String CARD_TYPE_NOVELTY = "CARD_TYPE_NOVELTY";
/**
* 运营位
*/
public static final String CARD_TYPE_BUSINESS_OPERATION = "CARD_TYPE_BUSINESS_OPERATION";
/**
* 默认地图缩放比例
*/
public static final float DEFAULT_ZOOM_LEVEL = 16.0f;
/**
* 默认地图锁车缩放比例
*/
public static final int DEFAULT_LOCK_CAR_ZOOM_LEVEL = 16;
/**
* 自动酸辛默认半径
*/
public static final int DEFAULT_AUTO_REFRESH_DATA_RADIUS = 2_000;
/**
* 30 s
*/
public static final int DEFAULT_AUTO_REFRESH_WHEN_INTERRUPT = 30 * 1_000;
}

View File

@@ -21,9 +21,9 @@ public class AutoRefreshStrategy {
private long interval = 3 * ONE_MINUTE;
/**
* 用户打断后的延时s
* 用户打断后的延时s【2.0.2后不再延时】
*/
private long interruptInterval = 1 * ONE_MINUTE;
private long interruptInterval = 0 * ONE_MINUTE;
/**
* 距离(米)

View File

@@ -3,6 +3,7 @@ package com.mogo.service;
import android.content.Context;
import com.alibaba.android.arouter.facade.template.IProvider;
import com.mogo.service.adas.IMogoADASController;
import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.cardmanager.IMogoCardManager;
import com.mogo.service.connection.IMogoSocketManager;
@@ -103,7 +104,7 @@ public interface IMogoServiceApis extends IProvider {
*
* @return
*/
IMogoSettingManager getSettingManager();
IMogoSettingManager getSettingManagerApi();
/**
* 网络接口api
@@ -129,5 +130,12 @@ public interface IMogoServiceApis extends IProvider {
*
* @return
*/
IMogoWindowManager getWindowManager();
IMogoWindowManager getWindowManagerApi();
/**
* 辅助驾驶控制接口
*
* @return
*/
IMogoADASController getAdasControllerApi();
}

View File

@@ -132,6 +132,12 @@ public class MogoServicePaths {
@Deprecated
public static final String PATH_DATA_MANAGER = "/datamanager/api";
/**
* adas 控制
*/
@Deprecated
public static final String PATH_ADAS_CONTROLLER = "/adascontroller/api";
/**
* 接口集合
*/

View File

@@ -0,0 +1,23 @@
package com.mogo.service.adas;
import com.alibaba.android.arouter.facade.template.IProvider;
/**
* @author congtaowang
* @since 2020-03-10
* <p>
* v2x 页面控制
*/
public interface IMogoADASController extends IProvider {
/**
* 打开adas
*/
void openADAS();
/**
* 关闭adas
*/
void closeADAS();
}

View File

@@ -12,11 +12,21 @@ public interface IMogoCardManager extends IProvider {
/**
* 切换卡片
* <p>
* 实际调用 switch2(cardType, false)
*
* @param cardType
*/
void switch2( String cardType );
/**
* 切换卡片
*
* @param cardType 卡片类型
* @param lockCar 是否锁车[将视图拉回车位]
*/
void switch2( String cardType, boolean lockCar );
/**
* 注册卡片切换监听
*/

View File

@@ -1,7 +1,5 @@
package com.mogo.service.datamanager;
import java.util.List;
/**
* @author congtaowang
* @since 2020-02-11

View File

@@ -11,6 +11,7 @@ import com.mogo.map.marker.IMogoMarkerManager;
import com.mogo.map.navi.IMogoNavi;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.map.navi.IMogoNaviListenerRegister;
import com.mogo.map.overlay.IMogoOverlayManager;
import com.mogo.map.search.geo.IMogoGeoSearch;
import com.mogo.map.search.inputtips.IMogoInputtipsSearch;
import com.mogo.map.search.inputtips.query.MogoInputtipsQuery;
@@ -68,7 +69,8 @@ public interface IMogoMapService extends IProvider {
*/
IMogoPoiSearch getPoiSearch( Context context, MogoPoiSearchQuery query );
/**f
/**
* f
* 获取导航操作实例
*
* @param context
@@ -96,4 +98,12 @@ public interface IMogoMapService extends IProvider {
* @return
*/
IMogoHosListenerRegister getHostListenerRegister();
/**
* 覆盖物操作
*
* @param context
* @return
*/
IMogoOverlayManager getOverlayManager( Context context );
}

View File

@@ -8,6 +8,7 @@ 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.adas.IMogoADASController;
import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.cardmanager.IMogoCardManager;
import com.mogo.service.connection.IMogoSocketManager;
@@ -114,15 +115,20 @@ public class MogoServiceApis implements IMogoServiceApis {
}
@Override
public IMogoSettingManager getSettingManager() {
public IMogoSettingManager getSettingManagerApi() {
return getApiInstance( IMogoSettingManager.class, MogoServicePaths.PATH_SETTING_MANAGER );
}
@Override
public IMogoWindowManager getWindowManager() {
public IMogoWindowManager getWindowManagerApi() {
return getApiInstance( IMogoWindowManager.class, MogoServicePaths.PATH_WINDOW_MANAGER );
}
@Override
public IMogoADASController getAdasControllerApi() {
return getApiInstance( IMogoADASController.class, MogoServicePaths.PATH_ADAS_CONTROLLER );
}
private static < T extends IProvider > T getApiInstance( Class< T > clazz, String path ) {
T inst = SingletonsHolder.get( clazz );
if ( inst == null ) {

View File

@@ -0,0 +1,79 @@
package com.mogo.service.impl.adas;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.adas.IMogoADASController;
import com.mogo.utils.logger.Logger;
import org.json.JSONObject;
/**
* @author congtaowang
* @since 2020-03-10
* <p>
* 描述
*/
@Route( path = MogoServicePaths.PATH_ADAS_CONTROLLER )
public class MogoADASController implements IMogoADASController {
private static final String TAG = "MogoADASController";
public static final String ACTION = "com.zhidao.speech.awake.notify";
public static final String PARAM_COMMAND = "command";
public static final String VAL_COMMAND = "system.application.operation";
public static final String PARAM_DATA = "data";
public static final String PARAM_OBJECT = "object";
public static final String VAL_OBJECT = "辅助驾驶";
public static final String PARAM_OPERATION = "operation";
public static final String VAL_OPEN = "打开";
public static final String VAL_CLOSE = "关闭";
@Override
public void openADAS() {
Intent intent = new Intent( ACTION );
intent.putExtra( PARAM_COMMAND, VAL_COMMAND );
JSONObject object = new JSONObject();
try {
object.put( PARAM_OBJECT, VAL_OBJECT );
object.put( PARAM_OPERATION, VAL_OPEN );
intent.putExtra( PARAM_DATA, object.toString() );
sendBroadcast( intent );
} catch ( Exception e ) {
Logger.e( TAG, e, "error." );
}
}
@Override
public void closeADAS() {
Intent intent = new Intent( ACTION );
intent.putExtra( PARAM_COMMAND, VAL_COMMAND );
JSONObject object = new JSONObject();
try {
object.put( PARAM_OBJECT, VAL_OBJECT );
object.put( PARAM_OPERATION, VAL_CLOSE );
intent.putExtra( PARAM_DATA, object.toString() );
sendBroadcast( intent );
} catch ( Exception e ) {
Logger.e( TAG, e, "error." );
}
}
private void sendBroadcast( Intent intent ) {
Application app = AbsMogoApplication.getApp();
if ( app == null ) {
Logger.e( TAG, "un handle Application instance." );
return;
}
app.sendBroadcast( intent );
}
@Override
public void init( Context context ) {
}
}

View File

@@ -10,12 +10,14 @@ import com.mogo.map.MogoLocationClient;
import com.mogo.map.MogoMapUIController;
import com.mogo.map.MogoMarkerManager;
import com.mogo.map.MogoNavi;
import com.mogo.map.MogoOverlayManager;
import com.mogo.map.MogoPoiSearch;
import com.mogo.map.listener.IMogoHosListenerRegister;
import com.mogo.map.listener.MogoHosListenerRegister;
import com.mogo.map.location.IMogoLocationClient;
import com.mogo.map.marker.IMogoMarkerManager;
import com.mogo.map.navi.IMogoNavi;
import com.mogo.map.overlay.IMogoOverlayManager;
import com.mogo.map.search.geo.IMogoGeoSearch;
import com.mogo.map.search.inputtips.IMogoInputtipsSearch;
import com.mogo.map.search.inputtips.query.MogoInputtipsQuery;
@@ -79,6 +81,11 @@ public class MogoMapService implements IMogoMapService {
return MogoHosListenerRegister.getInstance();
}
@Override
public IMogoOverlayManager getOverlayManager( Context context ) {
return MogoOverlayManager.getInstance();
}
@Override
public void init( Context context ) {
MogoInitor.init( context );