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

This commit is contained in:
tongchenfei
2020-03-24 10:38:27 +08:00
72 changed files with 722 additions and 214 deletions

View File

@@ -21,10 +21,10 @@ android {
multiDexEnabled true
externalNativeBuild {
// ndk {
// // 设置支持的SO库架构
// abiFilters 'armeabi-v7a'
// }
ndk {
// 设置支持的SO库架构
abiFilters 'armeabi-v7a'
}
}
}
signingConfigs {

View File

@@ -5,7 +5,7 @@ ext {
buildToolsVersion: "29.0.2",
minSdkVersion : 19,
targetSdkVersion : 22,
versionCode : 2,
versionCode : 3,
versionName : "1.0.2",
]

View File

@@ -312,8 +312,9 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack {
}
mHasFlush = true;
Logger.d( TAG, "flush cache voice command when voice service ready." );
for ( String cmd : mCacheUnWakeupCommands.keySet() ) {
registerUnWakeupCommand( cmd, mCacheUnWakeupCommands.get( cmd ) );
final Map< String, String[] > tmp = new HashMap<>( mCacheUnWakeupCommands );
for ( String cmd : tmp.keySet() ) {
registerUnWakeupCommand( cmd, tmp.get( cmd ) );
}
}

View File

@@ -0,0 +1,65 @@
package com.mogo.utils;
import android.os.Handler;
import android.os.HandlerThread;
/**
* @author congtaowang
* @since 2020-03-23
* <p>
* 描述
*/
public class WorkThreadHandler {
private Handler mHandler;
private HandlerThread mThread;
private WorkThreadHandler() {
// private constructor
mThread = new HandlerThread( "work-thread-handler" );
mThread.start();
mHandler = new Handler( mThread.getLooper() );
}
private static final class InstanceHolder {
private static final WorkThreadHandler INSTANCE = new WorkThreadHandler();
}
public static WorkThreadHandler getInstance() {
return InstanceHolder.INSTANCE;
}
private Object readResolve() {
// 阻止反序列化,必须实现 Serializable 接口
return InstanceHolder.INSTANCE;
}
private Object sToken = new Object();
public boolean post( Runnable r ) {
return mHandler != null && mHandler.post( r );
}
public boolean postDelayed(Runnable r, long delayMillis ) {
return mHandler != null && mHandler.postDelayed( r, delayMillis );
}
public Handler getWorkThreadHandler() {
return mHandler;
}
public boolean postOnceDelayed(Runnable r, long delayMillis ) {
if ( mHandler == null ) {
return false;
} else {
mHandler.removeCallbacks( r, sToken );
return mHandler.postDelayed( r, delayMillis );
}
}
public void removeCallbacks( Runnable runnable ) {
if ( mHandler != null ) {
mHandler.removeCallbacks( runnable );
}
}
}

View File

@@ -16,6 +16,7 @@ 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.LocationSource;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.CameraPosition;
import com.amap.api.maps.model.LatLng;
@@ -78,6 +79,9 @@ public class AMapNaviViewWrapper implements IMogoMapView,
private AMapMarkerClickHandler mMarkerClickHandler;
private EnumMapUI mCurrentUIMode;
// 自定义定位源的回调信息,前瞻线
private LocationSource.OnLocationChangedListener mOnLocationChangedListener;
public AMapNaviViewWrapper( AMapNaviView mapView ) {
this.mMapView = mapView;
this.mIMap = new AMapWrapper( mMapView.getMap(), mMapView, this );
@@ -89,70 +93,71 @@ public class AMapNaviViewWrapper implements IMogoMapView,
}
private void initMapView() {
if ( mMapView != null ) {
AMapNaviViewOptions options = mMapView.getViewOptions();
if ( options != null ) {
// 设置是否开启自动黑夜模式切换默认为false不自动切换
options.setAutoNaviViewNightMode( false );
// 设置6秒后是否自动锁车
options.setAutoLockCar( false );
// 设置路线上的摄像头气泡是否显示
options.setCameraBubbleShow( true );
// 设置路线相关的配置属性,如:路线的路况颜色,路线上是否显示摄像头气泡等。
// options.setRouteOverlayOptions( MapStyleUtils.getRouteOverlayOptions() );
// 设置自车的图片对象
options.setCarBitmap( BitmapFactory.decodeResource( getContext().getResources(),
R.drawable.ic_amap_navi_cursor ) );
// 设置指南针图标否在导航界面显示默认显示。true显示false隐藏。
options.setCompassEnabled( false );
// 黑夜模式
options.setNaviNight( true );
//设置路况光柱条是否显示(只适用于驾车导航,需要联网)。
options.setTrafficBarEnabled( false );
// 设置[实时交通图层开关按钮]是否显示(只适用于驾车导航,需要联网)。
options.setTrafficLayerEnabled( false );
// 设置导航界面是否显示路线全览按钮。
options.setRouteListButtonShow( false );
// 设置导航状态下屏幕是否一直开启。
options.setScreenAlwaysBright( true );
// 设置交通播报是否打开(只适用于驾车导航,需要联网)。
options.setTrafficInfoUpdateEnabled( true );
// 设置摄像头播报是否打开(只适用于驾车导航)。
options.setCameraInfoUpdateEnabled( true );
// 设置菜单按钮是否在导航界面显示。
options.setSettingMenuEnabled( false );
// 设置是否绘制显示交通路况的线路(彩虹线),拥堵-红色,畅通-绿色,缓慢-黄色,未知-蓝色。默认不绘制彩虹线。
options.setTrafficLine( true );
// 设置是否绘制牵引线(当前位置到目的地的指引线)。默认不绘制牵引线。
options.setLeaderLineEnabled( -1 );
// 设置导航界面UI是否显示。
options.setLayoutVisible( false );
// 设置是否自动画路
options.setAutoDrawRoute( false );
// 设置是否显示路口放大图(实景图)
options.setRealCrossDisplayShow( false );
// 设置是否显示路口放大图(路口模型图)
options.setModeCrossDisplayShow( false );
// 设置是否显示道路信息view
options.setLaneInfoShow( false );
// 设置是否自动改变缩放等级
options.setAutoChangeZoom( true );
// 设置是否自动全览模式,即在算路成功后自动进入全览模式
options.setAutoDisplayOverview( false );
// 设置路线转向箭头隐藏和显示
options.setNaviArrowVisible( false );
// 通过路线是否自动置灰,仅支持驾车导航
options.setAfterRouteAutoGray( true );
options.setZoom( 16 );
options.setPointToCenter( 0.5D, 0.5D );
// 2D模式
options.setTilt( 0 );
mMapView.setViewOptions( options );
}
mMapView.setRouteOverlayVisible( false );
mMapView.setCarOverlayVisible( false );
setUIMode(EnumMapUI.CarUp_2D, null);
if ( mMapView == null ) {
return;
}
AMapNaviViewOptions options = mMapView.getViewOptions();
if ( options != null ) {
// 设置是否开启自动黑夜模式切换默认为false不自动切换
options.setAutoNaviViewNightMode( false );
// 设置6秒后是否自动锁车
options.setAutoLockCar( false );
// 设置路线上的摄像头气泡是否显示
options.setCameraBubbleShow( true );
// 设置路线相关的配置属性,如:路线的路况颜色,路线上是否显示摄像头气泡等。
// options.setRouteOverlayOptions( MapStyleUtils.getRouteOverlayOptions() );
// 设置自车的图片对象
options.setCarBitmap( BitmapFactory.decodeResource( getContext().getResources(),
R.drawable.ic_amap_navi_cursor ) );
// 设置指南针图标否在导航界面显示默认显示。true显示false隐藏。
options.setCompassEnabled( false );
// 黑夜模式
options.setNaviNight( true );
//设置路况光柱条是否显示(只适用于驾车导航,需要联网)。
options.setTrafficBarEnabled( false );
// 设置[实时交通图层开关按钮]是否显示(只适用于驾车导航,需要联网)。
options.setTrafficLayerEnabled( false );
// 设置导航界面是否显示路线全览按钮。
options.setRouteListButtonShow( false );
// 设置导航状态下屏幕是否一直开启。
options.setScreenAlwaysBright( true );
// 设置交通播报是否打开(只适用于驾车导航,需要联网)。
options.setTrafficInfoUpdateEnabled( true );
// 设置摄像头播报是否打开(只适用于驾车导航)。
options.setCameraInfoUpdateEnabled( true );
// 设置菜单按钮是否在导航界面显示。
options.setSettingMenuEnabled( false );
// 设置是否绘制显示交通路况的线路(彩虹线),拥堵-红色,畅通-绿色,缓慢-黄色,未知-蓝色。默认不绘制彩虹线。
options.setTrafficLine( true );
// 设置是否绘制牵引线(当前位置到目的地的指引线)。默认不绘制牵引线。
options.setLeaderLineEnabled( -1 );
// 设置导航界面UI是否显示。
options.setLayoutVisible( false );
// 设置是否自动画路
options.setAutoDrawRoute( false );
// 设置是否显示路口放大图(实景图)
options.setRealCrossDisplayShow( false );
// 设置是否显示路口放大图(路口模型图)
options.setModeCrossDisplayShow( false );
// 设置是否显示道路信息view
options.setLaneInfoShow( false );
// 设置是否自动改变缩放等级
options.setAutoChangeZoom( true );
// 设置是否自动全览模式,即在算路成功后自动进入全览模式
options.setAutoDisplayOverview( false );
// 设置路线转向箭头隐藏和显示
options.setNaviArrowVisible( false );
// 通过路线是否自动置灰,仅支持驾车导航
options.setAfterRouteAutoGray( true );
options.setZoom( 16 );
options.setPointToCenter( 0.5D, 0.5D );
// 2D模式
options.setTilt( 0 );
mMapView.setViewOptions( options );
}
mMapView.setRouteOverlayVisible( false );
mMapView.setCarOverlayVisible( false );
setUIMode( EnumMapUI.CarUp_2D, null );
}
private void initListeners() {
@@ -197,6 +202,7 @@ public class AMapNaviViewWrapper implements IMogoMapView,
initMapView();
initListeners();
initMyLocation();
// initLocationSource();
}
}
@@ -445,7 +451,6 @@ public class AMapNaviViewWrapper implements IMogoMapView,
}
}
private boolean checkAMapView() {
if ( mMapView == null ) {
Logger.e( TAG, "高德mapView实例为空请检查" );
@@ -462,12 +467,15 @@ public class AMapNaviViewWrapper implements IMogoMapView,
return;
}
loseLockMode();
mMapView.getMap()
.moveCamera( CameraUpdateFactory.newLatLng( new LatLng( latLng.lat, latLng.lng ) ) );
mMapView.getMap().moveCamera( CameraUpdateFactory.newLatLng( new LatLng( latLng.lat, latLng.lng ) ) );
}
@Override
public void showMyLocation( boolean visible ) {
Logger.d( TAG, "showMyLocation1 %s", visible );
if ( visible && NaviClient.getInstance( getContext() ).isNaviing() ) {
return;
}
if ( checkAMapView() ) {
MyLocationStyle style = mMapView.getMap().getMyLocationStyle();
style.showMyLocation( visible );
@@ -479,16 +487,15 @@ public class AMapNaviViewWrapper implements IMogoMapView,
}
}
private View mCursorView;
@Override
public void showMyLocation( float degree ) {
public void showMyLocation( View view ) {
if ( NaviClient.getInstance( getContext() ).isNaviing() ) {
return;
}
if ( checkAMapView() ) {
mCursorView = View.inflate( getContext(), R.layout.map_amap_cursor, null );
mCursorView.setRotation( degree );
MyLocationStyle style = mMapView.getMap().getMyLocationStyle();
style.showMyLocation( true );
style.myLocationIcon( BitmapDescriptorFactory.fromView( mCursorView ) );
style.myLocationIcon( BitmapDescriptorFactory.fromView( view ) );
mMapView.getMap().setMyLocationStyle( style );
}
}
@@ -507,6 +514,22 @@ public class AMapNaviViewWrapper implements IMogoMapView,
}
}
private void initLocationSource() {
if ( checkAMapView() ) {
mMapView.getMap().setLocationSource( new LocationSource() {
@Override
public void activate( OnLocationChangedListener onLocationChangedListener ) {
AMapNaviViewWrapper.this.mOnLocationChangedListener = onLocationChangedListener;
}
@Override
public void deactivate() {
}
} );
}
}
@Override
public void recoverLockMode() {
if ( checkAMapView() ) {
@@ -632,6 +655,7 @@ public class AMapNaviViewWrapper implements IMogoMapView,
@Override
public void setPointToCenter( double mapCenterX, double mapCenterY ) {
if ( checkAMapView() ) {
Logger.d( TAG, "setPointToCenter(%s, %s)", mapCenterX, mapCenterY );
AMapNaviViewOptions options = mMapView.getViewOptions();
options.setPointToCenter( mapCenterX, mapCenterY );
mMapView.setViewOptions( options );
@@ -741,4 +765,11 @@ public class AMapNaviViewWrapper implements IMogoMapView,
public EnumMapUI getCurrentUiMode() {
return mCurrentUIMode;
}
@Override
public void changeMyLocation( Location location ) {
if ( mOnLocationChangedListener != null ) {
mOnLocationChangedListener.onLocationChanged( location );
}
}
}

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.LocationSource;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.Polyline;

View File

@@ -28,6 +28,7 @@ import java.util.List;
public abstract class AMapNaviListenerAdapter implements AMapNaviListener {
private static final String TAG = "AMapNaviListenerAdapter";
protected String mLastSpeakWord;
@Override
public void onInitNaviFailure() {
@@ -61,7 +62,8 @@ public abstract class AMapNaviListenerAdapter implements AMapNaviListener {
@Override
public void onGetNavigationText( String s ) {
mLastSpeakWord = s;
Logger.d( TAG, s );
}
@Override

View File

@@ -51,7 +51,7 @@ public class NaviClient implements IMogoNavi {
private NaviClient( Context context ) {
mAMapNavi = AMapNavi.getInstance( context );
mAMapNavi.setEmulatorNaviSpeed( 120 );
mAMapNavi.setUseInnerVoice( true );
mAMapNavi.setUseInnerVoice( true, true );
mAMapNaviListener = new NaviListenerAdapter( context, mAMapNavi, this );
mAimlessModeListener = new AimlessModeListenerAdapter() {
};

View File

@@ -3,6 +3,7 @@ package com.mogo.map.impl.amap.navi;
import android.content.Context;
import android.graphics.Rect;
import android.os.Trace;
import android.text.TextUtils;
import com.amap.api.maps.model.Polyline;
import com.amap.api.navi.AMapNavi;
@@ -16,6 +17,7 @@ import com.amap.api.navi.model.AMapNaviCameraInfo;
import com.amap.api.navi.model.AMapNaviInfo;
import com.amap.api.navi.model.AMapNaviLocation;
import com.amap.api.navi.model.NaviInfo;
import com.mogo.commons.voice.AIAssist;
import com.mogo.map.MogoLatLng;
import com.mogo.map.impl.amap.AMapWrapper;
import com.mogo.map.impl.amap.message.AMapMessageManager;
@@ -182,6 +184,10 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter {
*/
private void stopNaviDelay() {
UiThreadHandler.postDelayed( () -> {
if ( TextUtils.isEmpty( mLastSpeakWord ) || !mLastSpeakWord.contains( "结束" ) ) {
AIAssist.getInstance( mContext ).speakTTSVoice( "到达目的地附近,本次导航结束" );
}
mLastSpeakWord = "";
stopNavi();
}, 5_000L );
}

View File

@@ -8,7 +8,12 @@ import android.text.TextUtils;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.LatLngBounds;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.MarkerOptionsCreator;
import com.amap.api.maps.model.Polyline;
import com.amap.api.navi.AMapNavi;
import com.amap.api.navi.model.AMapNaviLocation;
@@ -66,6 +71,11 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction {
private CalculatePathItem mSelectedCalculatePathItem;
private OnCalculatePathItemClickInteraction mLineClickInteraction;
/**
* 起点终点marker
*/
private List< Marker > mMarkers = new ArrayList<>();
public NaviOverlayHelper( AMapNavi mAMapNavi, AMap mAMap, Context mContext ) {
this.mAMapNavi = mAMapNavi;
this.mAMap = mAMap;
@@ -83,10 +93,30 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction {
return;
}
addEndPoints();
showPathsBound( mCalculatePathItems.get( 0 ).getPath().getBoundsForPath() );
showPathsBound( getBounds() );
renderPathOverlay( mCalculatePathItems );
}
private LatLngBounds getBounds(){
if ( mCalculatePathItems == null ) {
return null;
}
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for ( CalculatePathItem calculatePathItem : mCalculatePathItems ) {
if ( calculatePathItem == null ) {
continue;
}
try {
LatLngBounds bounds = calculatePathItem.getPath().getBoundsForPath();
builder.include( bounds.northeast );
builder.include( bounds.southwest );
} catch ( Exception e ) {
e.printStackTrace();
}
}
return builder.build();
}
/**
* 按pathId升序排序
*
@@ -138,6 +168,9 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction {
* 将规划好的路径显示在视野内
*/
private void showPathsBound( LatLngBounds bounds ) {
if ( bounds == null ) {
return;
}
checkAMapInstance();
mAMap.animateCamera(
CameraUpdateFactory.newLatLngBoundsRect( bounds, mBoundRect.left, mBoundRect.right,
@@ -182,9 +215,9 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction {
Bitmap bitmap = BitmapFactory.decodeResource( mContext.getResources(), R.drawable.ic_endpoint );
Bitmap startBitmap = BitmapFactory.decodeResource( mContext.getResources(), R.drawable.ic_navi_start );
Bitmap endBitmap = BitmapFactory.decodeResource( mContext.getResources(), R.drawable.ic_navi_target );
MogoMarkerOptions options = new MogoMarkerOptions().icon( bitmap ).zIndex( 0 ).anchor( 0.5f, 0.5f );
MogoMarkerOptions startOptions = new MogoMarkerOptions().icon( startBitmap ).zIndex( 0 ).anchor( 0.5f, 1 );
MogoMarkerOptions endOptions = new MogoMarkerOptions().icon( endBitmap ).zIndex( 0 ).anchor( 0.5f, 1 );
MarkerOptions options = new MarkerOptions().icon( BitmapDescriptorFactory.fromBitmap( bitmap ) ).zIndex( 0 ).anchor( 0.5f, 0.5f );
MarkerOptions startOptions = new MarkerOptions().icon( BitmapDescriptorFactory.fromBitmap( startBitmap ) ).zIndex( 0 ).anchor( 0.5f, 1 );
MarkerOptions endOptions = new MarkerOptions().icon( BitmapDescriptorFactory.fromBitmap( endBitmap ) ).zIndex( 0 ).anchor( 0.5f, 1 );
for ( CalculatePathItem path : mCalculatePathItems ) {
List< MogoLatLng > points = path.getCoordList();
if ( points == null || points.isEmpty() ) {
@@ -195,10 +228,10 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction {
if ( startPoint == null || endPoint == null ) {
continue;
}
MogoMap.getInstance().getMogoMap().addMarker( TAG, options.latitude( startPoint.lat ).longitude( startPoint.lng ) );
MogoMap.getInstance().getMogoMap().addMarker( TAG, options.latitude( endPoint.lat ).longitude( endPoint.lng ) );
MogoMap.getInstance().getMogoMap().addMarker( TAG, startOptions.latitude( startPoint.lat ).longitude( startPoint.lng ) );
MogoMap.getInstance().getMogoMap().addMarker( TAG, endOptions.latitude( endPoint.lat ).longitude( endPoint.lng ) );
mMarkers.add( mAMap.addMarker( options.position( new LatLng( startPoint.lat, startPoint.lng ) ) ) );
mMarkers.add( mAMap.addMarker( options.position( new LatLng( endPoint.lat, endPoint.lng ) ) ) );
mMarkers.add( mAMap.addMarker( startOptions.position( new LatLng( startPoint.lat, startPoint.lng ) ) ) );
mMarkers.add( mAMap.addMarker( endOptions.position( new LatLng( endPoint.lat, endPoint.lng ) ) ) );
break;
}
@@ -221,6 +254,19 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction {
if ( mPaths != null ) {
mPaths.clear();
}
if ( !mMarkers.isEmpty() ) {
for ( Marker mMarker : mMarkers ) {
if ( mMarker == null ) {
continue;
}
try {
mMarker.remove();
mMarker.destroy();
} catch ( Exception e ) {
}
}
}
MogoMarkersHandler.getInstance().remove( TAG );
}

View File

@@ -2,17 +2,22 @@ package com.mogo.map.impl.amap.overlay;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.util.Log;
import com.amap.api.maps.AMap;
import com.amap.api.maps.model.NavigateArrowOptions;
import com.amap.api.maps.model.Polyline;
import com.amap.api.navi.model.AMapNaviLocation;
import com.amap.api.navi.model.AMapNaviPath;
import com.amap.api.navi.model.NaviInfo;
import com.amap.api.navi.model.RouteOverlayOptions;
import com.amap.api.navi.view.RouteOverLay;
import com.mogo.map.impl.amap.utils.MapStyleUtils;
import com.mogo.utils.logger.Logger;
import java.lang.ref.WeakReference;
import java.lang.reflect.Field;
/**
* @author congtaowang
@@ -36,6 +41,8 @@ public class RouteOverLayWrapper {
private int mEndBitmapResId = 0;
private int mZIndex = 0;
private static RouteOverlayOptions sOptions;
public RouteOverLayWrapper( Context context,
AMap mAMap,
AMapNaviPath mPath ) {
@@ -49,7 +56,10 @@ public class RouteOverLayWrapper {
return;
}
mRouteOverLay = new RouteOverLay( mAMap, mPath, mContextRef.get() );
mRouteOverLay.setRouteOverlayOptions( MapStyleUtils.getRouteOverlayOptions() );
if ( sOptions == null ) {
sOptions = MapStyleUtils.getRouteOverlayOptions();
}
mRouteOverLay.setRouteOverlayOptions( sOptions );
mRouteOverLay.setTrafficLine( true );
mRouteOverLay.setRouteOverlayVisible( true );
mRouteOverLay.setTrafficLightsVisible( true );
@@ -58,6 +68,7 @@ public class RouteOverLayWrapper {
mRouteOverLay.setNaviArrowVisible( true );
mRouteOverLay.setLightsVisible( true );
mRouteOverLay.setTrafficLightsVisible( mIsTrafficLightsVisible );
hookRouteArrow();
if ( mStartBitmapResId != 0 ) {
try {
@@ -166,6 +177,19 @@ public class RouteOverLayWrapper {
}
}
private void hookRouteArrow() {
if ( mRouteOverLay != null && sOptions != null ) {
try {
Field field = mRouteOverLay.getClass().getDeclaredField( "naviArrow" );
field.setAccessible( true );
field.set( mRouteOverLay, mAMap.addNavigateArrow( new NavigateArrowOptions().topColor( sOptions.getArrowColor() ).width( sOptions.getLineWidth() ).sideColor( sOptions.getArrowSideColor() ) ) );
Logger.d( TAG, "hook 成功。" );
} catch ( Exception e ) {
e.printStackTrace();
}
}
}
public Polyline getTrafficColorfulPolyline() {
if ( mRouteOverLay != null ) {
return mRouteOverLay.mTrafficColorfulPolyline;

View File

@@ -2,6 +2,7 @@ package com.mogo.map.impl.amap.uicontroller;
import android.graphics.Point;
import android.graphics.Rect;
import android.location.Location;
import android.view.View;
import android.view.animation.Interpolator;
@@ -93,9 +94,9 @@ public class AMapUIController implements IMogoMapUIController {
}
@Override
public void showMyLocation( float degree ) {
public void showMyLocation( View view ) {
if ( mClient != null ) {
mClient.showMyLocation( degree );
mClient.showMyLocation( view );
}
}
@@ -233,4 +234,11 @@ public class AMapUIController implements IMogoMapUIController {
}
return null;
}
@Override
public void changeMyLocation( Location location ) {
if ( mClient != null ) {
mClient.changeMyLocation( location );
}
}
}

View File

@@ -60,6 +60,8 @@ public class MapStyleUtils {
options.setPassRoute( colorToBitmap( ColorEnum.light_gray.getColor() ) );
// 设置路线虚线纹理
options.setFairWayRes( colorToBitmap( ColorEnum.route_overlay_line_normal.getColor() ) );
options.setArrowColor( Color.WHITE ); // 高德地图内部配置颜色
options.setArrowSideColor( 1990523135 ); // 高德地图内部配置颜色
return options;
}

View File

@@ -2,6 +2,7 @@ package com.mogo.map.uicontroller;
import android.graphics.Point;
import android.graphics.Rect;
import android.location.Location;
import android.view.View;
import android.view.animation.Interpolator;
@@ -55,9 +56,17 @@ public interface IMogoMapUIController {
void showMyLocation( boolean visible );
/**
* @param degree 车标方向
*
* @param view
*/
void showMyLocation( float degree );
void showMyLocation( View view );
/**
* 以外部定位的方式改变当前位置
*
* @param location
*/
void changeMyLocation( Location location );
/**
* 锁车

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 86 KiB

View File

@@ -2,6 +2,7 @@ package com.mogo.map;
import android.graphics.Point;
import android.graphics.Rect;
import android.location.Location;
import android.view.View;
import android.view.animation.Interpolator;
@@ -87,9 +88,9 @@ public class MogoMapUIController implements IMogoMapUIController {
}
@Override
public void showMyLocation( float degree ) {
public void showMyLocation( View view ) {
if ( mDelegate != null ) {
mDelegate.showMyLocation( degree );
mDelegate.showMyLocation( view );
}
}
@@ -226,4 +227,11 @@ public class MogoMapUIController implements IMogoMapUIController {
}
return null;
}
@Override
public void changeMyLocation( Location location ) {
if ( mDelegate != null ) {
mDelegate.changeMyLocation( location );
}
}
}

View File

@@ -177,10 +177,6 @@ public class AppNavigatorFragment extends MvpFragment<AppNavigatorView, AppNavig
mMogoAnalytics.track("Launcher_APP_Icon", properties);
}
@Override
public void closeAppsPanel() {
}
@Override
public void onDestroyView() {
super.onDestroyView();
@@ -198,7 +194,7 @@ public class AppNavigatorFragment extends MvpFragment<AppNavigatorView, AppNavig
// appIndicatorAdapter.setCurrentPos(i);
//}
//this.currentPosition=currentPosition;
AppServiceHandler.getMogoCardManager().switch2(apps.get(i % CARD_SIZE).mModuleType);
AppServiceHandler.getMogoCardManager().switch2(apps.get(i % CARD_SIZE).mModuleType, true);
//holder.showText();

View File

@@ -7,6 +7,8 @@ import androidx.lifecycle.LifecycleOwner;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.commons.mvp.Presenter;
import com.mogo.commons.voice.AIAssist;
import com.mogo.commons.voice.IMogoVoiceCmdCallBack;
import com.mogo.module.apps.model.AppsModel;
import com.mogo.module.apps.utils.LaunchUtils;
import com.mogo.service.MogoServicePaths;
@@ -24,7 +26,7 @@ import org.json.JSONObject;
* <p>
* 描述
*/
public class AppNavigatorPresenter extends Presenter< AppNavigatorView > implements IMogoIntentListener {
public class AppNavigatorPresenter extends Presenter< AppNavigatorView > implements IMogoIntentListener, IMogoVoiceCmdCallBack {
private static final String TAG = "AppNavigatorPresenter";
@@ -41,12 +43,14 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme
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 );
AppsModel.getInstance( getContext() ).load( null );
}
@Override
public void onResume( @NonNull LifecycleOwner owner ) {
super.onResume( owner );
AIAssist.getInstance( getContext() ).registerUnWakeupCommand( AppsConst.CMD_UN_WAKE_OPEN_APP_LIST, AppsConst.CMD_UN_WAKE_WORDS_OPEN_APP_LIST, this );
AIAssist.getInstance( getContext() ).registerUnWakeupCommand( AppsConst.CMD_UN_WAKE_OPEN_CAR_SETTINGS, AppsConst.CMD_UN_WAKE_WORDS_OPEN_CAR_SETTINGS, this );
mIntentManager.registerIntentListener( AppsConst.COMMAND_OPERATION, this );
}
@@ -54,6 +58,8 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme
public void onPause( @NonNull LifecycleOwner owner ) {
super.onPause( owner );
mIntentManager.unregisterIntentListener( AppsConst.COMMAND_OPERATION, this );
AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( AppsConst.CMD_UN_WAKE_OPEN_APP_LIST );
AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( AppsConst.CMD_UN_WAKE_OPEN_CAR_SETTINGS );
}
@Override
@@ -83,6 +89,42 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme
}
}
@Override
public void onCmdSelected( String cmd ) {
switch ( cmd ) {
case AppsConst.CMD_UN_WAKE_OPEN_APP_LIST:
mView.openAppsPanel();
break;
case AppsConst.CMD_UN_WAKE_OPEN_CAR_SETTINGS:
try {
LaunchUtils.launchByPkg( getContext(), AppsConst.APP_PKG_CAR_SETTINGS );
} catch ( Exception e ) {
TipToast.shortTip( R.string.module_apps_str_no_app );
}
break;
}
}
@Override
public void onCmdAction( String speakText ) {
}
@Override
public void onCmdCancel( String speakText ) {
}
@Override
public void onSpeakEnd( String speakText ) {
}
@Override
public void onSpeakSelectTimeOut( String speakText ) {
}
@Override
public void onDestroy( @NonNull LifecycleOwner owner ) {
if ( mIntentManager != null ) {

View File

@@ -15,9 +15,4 @@ public interface AppNavigatorView extends IView {
* 打开全部应用
*/
void openAppsPanel();
/**
* 关闭全部应用
*/
void closeAppsPanel();
}

View File

@@ -18,10 +18,6 @@ public class AppsConst {
*/
public static final int TOTAL_SIZE_EACH_PAGE = 12;
/**
* 媒体跳转
*/
public static final String APP_PKG_MUSIC = "com.pvetec.musics";
/**
* 车辆设置跳转
*/
@@ -32,5 +28,13 @@ public class AppsConst {
public static final String OPERATION_OPEN = "打开";
public static final String OPERATION_CLOSE = "关闭";
public static final String CMD_UN_WAKE_OPEN_APP_LIST = "CMD_UN_WAKE_OPEN_APP_LIST";
public static final String[] CMD_UN_WAKE_WORDS_OPEN_APP_LIST = new String[]{"打开全部应用"};
public static final String CMD_UN_WAKE_CLOSE_APP_LIST = "CMD_UN_WAKE_CLOSE_APP_LIST";
public static final String[] CMD_UN_WAKE_WORDS_CLOSE_APP_LIST = new String[]{"关闭全部应用"};
public static final String CMD_UN_WAKE_OPEN_CAR_SETTINGS = "CMD_UN_WAKE_OPEN_CAR_SETTINGS";
public static final String[] CMD_UN_WAKE_WORDS_OPEN_CAR_SETTINGS = new String[]{"打开快捷设置"};
}

View File

@@ -1,12 +1,15 @@
package com.mogo.module.apps;
import android.content.Intent;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.commons.mvp.Presenter;
import com.mogo.commons.voice.AIAssist;
import com.mogo.commons.voice.IMogoVoiceCmdCallBack;
import com.mogo.module.apps.utils.LaunchUtils;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.intent.IMogoIntentListener;
@@ -22,7 +25,7 @@ import org.json.JSONObject;
* <p>
* 描述
*/
public class AppsListPresenter extends Presenter< AppsListView > implements IMogoIntentListener {
public class AppsListPresenter extends Presenter< AppsListView > implements IMogoIntentListener, IMogoVoiceCmdCallBack {
private static final String TAG = "AppsListPresenter";
@@ -37,30 +40,58 @@ public class AppsListPresenter extends Presenter< AppsListView > implements IMog
super.onCreate( owner );
mIntentManager = ( IMogoIntentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_INTENT_MANAGER ).navigation( getContext() );
mIntentManager.registerIntentListener( AppsConst.COMMAND_OPERATION, this );
AIAssist.getInstance( getContext() ).registerUnWakeupCommand( AppsConst.CMD_UN_WAKE_CLOSE_APP_LIST, AppsConst.CMD_UN_WAKE_WORDS_CLOSE_APP_LIST, this );
}
@Override
public void onIntentReceived( String intentStr, Intent intent ) {
if ( !AppsConst.COMMAND_OPERATION.equals( intentStr ) ) {
return;
}
try {
JSONObject object = new JSONObject( intent.getStringExtra( "data" ) );
String app = object.optString( "object" );
String operation = object.optString( "operation" );
if ( AppsConst.OBJECT_ALL_APPS.equals( app ) ) {
if ( AppsConst.OPERATION_CLOSE.equals( operation ) ) {
mView.closeAppsPanel();
if ( AppsConst.COMMAND_OPERATION.equals( intentStr ) ) {
try {
JSONObject object = new JSONObject( intent.getStringExtra( "data" ) );
String app = object.optString( "object" );
String operation = object.optString( "operation" );
if ( AppsConst.OBJECT_ALL_APPS.equals( app ) ) {
if ( AppsConst.OPERATION_CLOSE.equals( operation ) ) {
mView.closeAppsPanel();
}
}
} catch ( JSONException e ) {
e.printStackTrace();
}
} catch ( JSONException e ) {
e.printStackTrace();
}
}
@Override
public void onCmdSelected( String cmd ) {
if ( TextUtils.equals( AppsConst.CMD_UN_WAKE_CLOSE_APP_LIST, cmd ) ) {
mView.closeAppsPanel();
}
}
@Override
public void onCmdAction( String speakText ) {
}
@Override
public void onCmdCancel( String speakText ) {
}
@Override
public void onSpeakEnd( String speakText ) {
}
@Override
public void onSpeakSelectTimeOut( String speakText ) {
}
@Override
public void onDestroy( @NonNull LifecycleOwner owner ) {
super.onDestroy( owner );
mIntentManager.unregisterIntentListener( AppsConst.COMMAND_OPERATION, this );
AIAssist.getInstance( getContext() ).unregisterUnWakeupCommand( AppsConst.CMD_UN_WAKE_CLOSE_APP_LIST );
}
}

View File

@@ -131,16 +131,22 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
.tag( MogoModulePaths.PATH_FRAGMENT_SEARCH )
.notifyMainModule( true )
.build() );
mApis.getAdasControllerApi().closeADAS();
} );
mHome = findViewById( R.id.module_entrance_id_home );
mHome.setOnClickListener( view -> {
mMogoAddressManager.goHome();
mApis.getAdasControllerApi().closeADAS();
} );
mCompany = findViewById( R.id.module_entrance_id_company );
mCompany.setOnClickListener( view -> {
mMogoAddressManager.goCompany();
mApis.getAdasControllerApi().closeADAS();
} );
mUploadRoadCondition = findViewById( R.id.module_entrance_id_upload_road_condition );

View File

@@ -14,6 +14,7 @@ import androidx.viewpager.widget.ViewPager;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.commons.mvp.MvpActivity;
import com.mogo.commons.voice.AIAssist;
import com.mogo.commons.voice.IMogoVoiceCmdCallBack;
import com.mogo.map.location.IMogoLocationClient;
import com.mogo.map.location.IMogoLocationListener;
import com.mogo.map.location.MogoLocation;
@@ -95,6 +96,13 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
private ViewPager.OnPageChangeListener mOnPageChangeListener;
/**
* 手势切换卡片必须为true
* <p>
* 业务切换则由业务控制
*/
private boolean mLockCarStatus = true;
@Override
protected int getLayoutId() {
return R.layout.module_main_activity_main;
@@ -114,15 +122,21 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
final long start = System.currentTimeMillis();
try {
IMogoModuleProvider provider = mCardModulesAdapter.getProvider( mCurrentPosition );
mPresenter.postTrackLastCardShowEvent( provider );
if ( mCurrentPosition != position ) {
mPresenter.postTrackLastCardShowEvent( provider );
}
mCurrentPosition = position;
provider = mCardModulesAdapter.getProvider( mCurrentPosition );
mMogoModuleHandler.setModuleEnable( provider.getModuleName() );
mMogoCardManager.invoke( position, mMogoModuleHandler.getCurrentModuleName() );
mMogoStatusManager.setUserInteractionStatus( TAG, true, false );
mMogoMapUIController.setLockZoom( 16 );
mMogoMapUIController.recoverLockMode();
if ( mLockCarStatus ) {
mMogoStatusManager.setUserInteractionStatus( TAG, true, false );
mMogoMapUIController.setLockZoom( 16 );
mMogoMapUIController.recoverLockMode();
}
mLockCarStatus = true;
} catch ( Exception e ) {
e.printStackTrace();
}
@@ -267,12 +281,6 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
if ( size == 0 ) {
showLayout();
} else if ( size == 1 ) {
UiThreadHandler.postDelayed(new Runnable() {
@Override public void run() {
mMogoMapUIController.setPointToCenter(0.5,0.5);
}
},1000);
hideLayout();
}
} );
@@ -344,20 +352,14 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
if ( mCardModulesAdapter == null ) {
return;
}
mLockCarStatus = lockCar;
int position = mCardModulesAdapter.getProviderPosition( cardType );
if ( position != -1 ) {
int lastFactPosition = mCardModulesAdapter.getFactPosition( mCurrentPosition );
mCardsContainer.setCurrentItem( mCurrentPosition + position - lastFactPosition,
Math.abs( lastFactPosition - position ) == 1 );
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();
}
}
@Override

View File

@@ -64,6 +64,7 @@ public class MainPresenter extends Presenter< MainView > {
public MainPresenter( MainView view ) {
super( view );
mCardStartShowTime = System.currentTimeMillis();
}
@Override
@@ -76,7 +77,6 @@ public class MainPresenter extends Presenter< MainView > {
mView.switch2Card( cardInfo.mCardName, cardInfo.mLockCar );
} );
mAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() );
mCardStartShowTime = System.currentTimeMillis();
}
/**

View File

@@ -56,8 +56,8 @@ public class HorizentalStackTransformer extends HorizentalBaseTransformer {
page.setTranslationX( -page.getHeight() * position + ( page.getHeight() * 0.5f ) * ( 1 - scale ) + spaceBetweenFirAndSecHeight * position );
}else{
float currentPage;
if(offsetScroll > 0.2f){
currentPage = 0.2f;
if(offsetScroll > 0.1f){
currentPage = 0.1f;
}else{
currentPage = offsetScroll;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View File

@@ -64,7 +64,7 @@
android:id="@+id/module_main_id_card_cover_up_bottom"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_26"
android:layout_marginTop="@dimen/cards_container_dp_600"
android:layout_marginTop="@dimen/cards_container_shadow_dp_margin_top"
android:layout_marginLeft="@dimen/dp_64"
android:layout_marginRight="@dimen/dp_64"
android:visibility="invisible"

View File

@@ -14,5 +14,6 @@
<dimen name="module_main_card_cover_up_margin">352px</dimen>
<dimen name="cards_container_dp_600">320px</dimen>
<dimen name="cards_container_shadow_dp_margin_top">319px</dimen>
</resources>

View File

@@ -13,5 +13,6 @@
<dimen name="module_main_top_shadow_height">270px</dimen>
<dimen name="module_main_card_cover_up_margin">660px</dimen>
<dimen name="cards_container_dp_600">600px</dimen>
<dimen name="cards_container_shadow_dp_margin_top">599px</dimen>
</resources>

View File

@@ -82,12 +82,11 @@ public class MapPresenter extends Presenter<MapView> implements
mView.getUIController().changeMapMode(EnumMapUI.CarUp_2D);
} else if (opera_type == 1) {
mView.getUIController().changeMapMode(EnumMapUI.NorthUP_2D);
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
//AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
} else if (opera_type == 2) {
mView.getUIController().changeMapMode(EnumMapUI.CarUp_3D);
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
//AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
}
}
@@ -252,7 +251,7 @@ public class MapPresenter extends Presenter<MapView> implements
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
case VoiceConstants.CMD_MAP_NORTH_UP_MODE:
mView.getUIController().changeMapMode(EnumMapUI.NorthUP_2D);
AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
//AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null);
break;
case VoiceConstants.CMD_MAP_3D_UN_WAKEUP:

View File

@@ -7,6 +7,7 @@ import com.mogo.module.navi.bean.EntityConvertUtils
import com.mogo.module.navi.bean.SearchPoi
import com.mogo.module.navi.constants.DataConstants
import com.mogo.module.navi.constants.SearchServiceHolder
import com.mogo.module.navi.cp.AddressHelper
import com.mogo.module.navi.dao.SearchPoiDao
import com.mogo.module.navi.database.AppDataBase
import com.mogo.module.navi.ui.search.ChoosePathFragment
@@ -114,20 +115,28 @@ object AddressManager {
}
}
fun deleteHome(){
fun deleteHome(context: Context){
Observable.create(
ObservableOnSubscribe<String> {
poiDao.delete(homeAddress)
homeAddress?.name=""
AddressHelper.notifyAddressChanged(context, homeAddress!!)
homeAddress=null
})
.subscribeOn(Schedulers.io())
.subscribe()
}
fun deleteCompany(){
fun deleteCompany(context: Context){
Observable.create(
ObservableOnSubscribe<String> {
poiDao.delete(companyAddress)
companyAddress?.name=""
AddressHelper.notifyAddressChanged(context, companyAddress!!)
companyAddress=null
})
.subscribeOn(Schedulers.io())

View File

@@ -10,6 +10,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.mogo.commons.voice.AIAssist
import com.mogo.commons.voice.IMogoVoiceCmdCallBack
import com.mogo.map.marker.IMogoMarker
import com.mogo.map.marker.IMogoMarkerClickListener
import com.mogo.map.marker.MogoMarkerOptions
import com.mogo.map.search.geo.MogoPoiItem
import com.mogo.map.search.inputtips.MogoTip
@@ -32,7 +33,13 @@ import kotlinx.android.synthetic.main.fragment_search_category.tv_navi_navi
* @author zyz
* 2020-01-09.
*/
class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBack {
class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBack
{
// override fun onMarkerClicked(marker: IMogoMarker?): Boolean {
//
// return true
// }
override fun onCmdSelected(cmd: String?) {
if (cmd?.startsWith("position") == true) {
var index = cmd.substring(8)
@@ -83,6 +90,7 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa
.icon(createWaterMask)
.latitude(datums[index].point?.lat ?: 0.0)
.owner("CategorySearchFragment")
.`object`(index)
// .anchor(0.5f, 1f)
.longitude(datums[index].point?.lng ?: 0.0)
arrayList.add(options)
@@ -98,6 +106,7 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa
addMarkers = SearchServiceHolder.getMarkerManger()
.addMarkers(TAG, arrayList, true)
moveMapToRight()
addClick()
}
private fun registerVoice() {
@@ -118,11 +127,30 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa
addMarkers = SearchServiceHolder.getMarkerManger()
.addMarkers(TAG, arrayList, true)
registerVoice()
addClick()
} else {
unRegisterVoice()
}
}
private fun addClick(){
if (addMarkers != null) {
for (item in addMarkers!!){
item.setOnMarkerClickListener {
var index = it.mogoMarkerOptions.`object` as Int
mAdapter.current=index
rv_search_result.smoothScrollToPosition(index)
updateMarker()
true
}
}
}
}
private lateinit var mAdapter: SearchCategoryAdapter
private lateinit var mSearchPresenter: CategoryPresenter
@@ -185,8 +213,9 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa
addMarkers?.get(mAdapter.lastPosition)
?.setIcon(getMarkerIcon(mAdapter.lastPosition))
addMarkers?.get(mAdapter.current)
?.setIcon(getMarkerIcon(mAdapter.current))
var current = addMarkers?.get(mAdapter.current)
current?.setIcon(getMarkerIcon(mAdapter.current))
current?.setToTop()
arrayList.get(mAdapter.lastPosition)
.icon(getMarkerIcon(mAdapter.lastPosition))
arrayList.get(mAdapter.current)

View File

@@ -177,9 +177,7 @@ public class SearchFragment extends BaseSearchFragment
}
});
AIAssist.getInstance(getContext())
.registerUnWakeupCommand(BACK_CMD, new String[] { "关闭", "返回" }, this);
registerVoidCmd();
registerVoidCmd();
}
private void goResult(MogoTip tag) {
@@ -217,7 +215,6 @@ public class SearchFragment extends BaseSearchFragment
private static final String WASH_CMD = "wash";
private static final String NAVI_SETTING_CMD = "setting";
private static final String CLEAN_CMD = "clean";
private static final String BACK_CMD = "back";
private void registerVoidCmd() {
@@ -522,7 +519,6 @@ public class SearchFragment extends BaseSearchFragment
SearchServiceHolder.INSTANCE.getMapUIController().showMyLocation(true);
moveMapToRight();
unRegisterVoice();
AIAssist.getInstance(getContext()).unregisterUnWakeupCommand(BACK_CMD);
}
private void unRegisterVoice() {
@@ -595,12 +591,10 @@ public class SearchFragment extends BaseSearchFragment
mSearchPresenter.deleteAllCachedPoi();
AIAssist.getInstance(getContext())
.speakQAndACmd(getString(R.string.notice_clean_history),
new String[] { "确定" }, new String[] { "取消" }, this);
new String[] { "确定","立即清空" }, new String[] { "取消" }, this);
break;
case BACK_CMD:
SearchServiceHolder.INSTANCE.getFragmentManager().clearAll();
break;
case GAS_CMD:
goCategory(getString(R.string.navi_gas));
@@ -642,8 +636,8 @@ public class SearchFragment extends BaseSearchFragment
@Override public void onCmdAction(String speakText) {
mSearchPresenter.deleteAllCachedPoi();
mSearchPresenter.hideDialog();
mSearchPresenter.deleteAllCachedPoiImpl();
}
@Override public void onCmdCancel(String speakText) {

View File

@@ -197,12 +197,12 @@ class NaviSettingFragment : BaseFragment(), OnCheckedChangeListener {
tv_navi_clear_home_address.setOnClickListener {
AddressManager.deleteHome()
AddressManager.deleteHome(context!!)
clearHome()
}
tv_navi_clear_company_address.setOnClickListener {
AddressManager.deleteCompany()
AddressManager.deleteCompany(context!!)
clearCompany()
}

View File

@@ -2,6 +2,7 @@ package com.mogo.module.navi.ui.setting
import android.graphics.BitmapFactory
import android.os.Bundle
import android.text.TextUtils
import android.view.View
import android.widget.Toast
import androidx.fragment.app.Fragment
@@ -43,8 +44,15 @@ import kotlinx.android.synthetic.main.fragment_setting_address.tv_set_as_home
class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
override fun onRegeocodeSearched(regeocodeResult: MogoRegeocodeResult?) {
et_navi_search.setText(regeocodeResult?.regeocodeAddress?.formatAddress)
selectPoi?.address=regeocodeResult?.regeocodeAddress?.formatAddress
selectPoi?.name=regeocodeResult?.regeocodeAddress?.building
var formatAddress = regeocodeResult?.regeocodeAddress?.formatAddress
selectPoi?.address = formatAddress
var neighborhood = regeocodeResult?.regeocodeAddress?.neighborhood
if (!TextUtils.isEmpty(neighborhood)) {
selectPoi?.name = neighborhood
}else{
selectPoi?.name = formatAddress
}
}
override fun onGeocodeSearched(geocodeResult: MogoGeocodeResult?) {
@@ -55,7 +63,7 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
private var style: Int = DataConstants.TYPE_HOME_ADDRESS
var addMarker: IMogoMarker? = null
private var selectPoi: SearchPoi?=null
private var selectPoi: SearchPoi? = null
private var mapListener: IMogoMapListener = object : MogoMapListenerAdapter() {
override fun onMapChanged(
latLng: MogoLatLng?,
@@ -64,20 +72,23 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
bearing: Float
) {
super.onMapChanged(latLng, zoom, tilt, bearing)
selectPoi=EntityConvertUtils.geoToPoi(latLng?.lat?:0.0,latLng?.lng?:0.0,style)
selectPoi = EntityConvertUtils.geoToPoi(latLng?.lat ?: 0.0, latLng?.lng ?: 0.0, style)
var mogoRegeocodeQuery = MogoRegeocodeQuery()
mogoRegeocodeQuery.point = latLng
SearchServiceHolder.getGeoSearcher().getFromLocationAsyn(mogoRegeocodeQuery)
SearchServiceHolder.getGeoSearcher()
.getFromLocationAsyn(mogoRegeocodeQuery)
addMarker?.apply {
SearchServiceHolder.getMapUIController().startJumpAnimation(this,
150f,{input ->
if (input <= 0.5) {
(0.5f - 2.0 * (0.5 - input) * (0.5 - input)).toFloat()
} else {
(0.5f - Math.sqrt(((input - 0.5f) * (1.5f - input)).toDouble())).toFloat()
}
}, 600)
SearchServiceHolder.getMapUIController()
.startJumpAnimation(this,
150f, { input ->
if (input <= 0.5) {
(0.5f - 2.0 * (0.5 - input) * (0.5 - input)).toFloat()
} else {
(0.5f - Math.sqrt(((input - 0.5f) * (1.5f - input)).toDouble())).toFloat()
}
}, 600
)
}
}
}
@@ -96,9 +107,11 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
.setGeoSearchListener(this)
SearchServiceHolder.statusManager.setSearchUIShow(
MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, true)
MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, true
)
SearchServiceHolder.getMarkerManger().removeMarkers()
SearchServiceHolder.getMarkerManger()
.removeMarkers()
}
override fun getLayoutId(): Int {
@@ -131,7 +144,8 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
}
tv_set_as_home.setOnClickListener {
if (selectPoi == null) {
Toast.makeText(context,"请选择",Toast.LENGTH_SHORT).show()
Toast.makeText(context, "请选择", Toast.LENGTH_SHORT)
.show()
return@setOnClickListener
}
insert(selectPoi!!)
@@ -146,16 +160,16 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
UiThreadHandler.postDelayed({
var decodeResource = BitmapFactory.decodeResource(resources, R.mipmap.icon_choose_position2)
val options = MogoMarkerOptions()
.icon(decodeResource)
.latitude(location?.lat ?: 0.0)
.owner(TAG)
.anchor(0.5f, 1f)
.longitude(location?.lng ?: 0.0)
.icon(decodeResource)
.latitude(location?.lat ?: 0.0)
.owner(TAG)
.anchor(0.5f, 1f)
.longitude(location?.lng ?: 0.0)
addMarker = SearchServiceHolder.getMarkerManger()
.addMarker(MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, options)
.addMarker(MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, options)
var locationPointInScreen = SearchServiceHolder.getMapUIController()
.getLocationPointInScreen(location)
.getLocationPointInScreen(location)
addMarker?.setPositionByPixels(locationPointInScreen)
}, 500L)
}
@@ -173,7 +187,7 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
.subscribe()
AddressHelper.notifyAddressChanged(context,searchPoi)
AddressHelper.notifyAddressChanged(context, searchPoi)
}
@@ -188,12 +202,14 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
addMarker?.destroy()
SearchServiceHolder.statusManager.setSearchUIShow(
MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, false)
MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, false
)
if (SearchServiceHolder.fragmentManager.stackSize == 0) {
moveMapToRight()
SearchServiceHolder.getMapUIController().showMyLocation(true)
}
if (SearchServiceHolder.fragmentManager.stackSize == 0) {
moveMapToRight()
SearchServiceHolder.getMapUIController()
.showMyLocation(true)
}
// moveMapToRight()
}

View File

@@ -6,6 +6,8 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.Location;
import android.location.LocationManager;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
@@ -13,6 +15,7 @@ import android.os.Message;
import android.os.Trace;
import android.text.TextUtils;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.NonNull;
@@ -46,6 +49,7 @@ import com.mogo.service.IMogoServiceApis;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.adas.IMogoADASController;
import com.mogo.service.cardmanager.IMogoCardManager;
import com.mogo.service.fragmentmanager.FragmentStackTransactionListener;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.intent.IMogoIntentListener;
import com.mogo.service.intent.IMogoIntentManager;
@@ -83,7 +87,8 @@ public class MogoServices implements IMogoMapListener,
IMogoStatusChangedListener,
IMogoIntentListener,
IMogoAimlessModeListener,
IMogoVoiceCmdCallBack {
IMogoVoiceCmdCallBack,
FragmentStackTransactionListener {
private boolean mInternalUnWakeupRegisterStatus = false;
@@ -299,14 +304,18 @@ public class MogoServices implements IMogoMapListener,
mIntentManager.registerIntentListener( ServiceConst.COMMAND_NEXT, this );
mIntentManager.registerIntentListener( ServiceConst.COMMAND_PREVIOUS, this );
mIntentManager.registerIntentListener( ServiceConst.COMMAND_SWITCH_CARD, this );
mIntentManager.registerIntentListener( ServiceConst.COMMAND_MY_LOCATION, this );
mIntentManager.registerIntentListener( MogoReceiver.ACTION_ADAS_STATUS, this );
mIntentManager.registerIntentListener( ServiceConst.COMMAND_OPERATION, this );
mIntentManager.registerIntentListener( MogoReceiver.ACTION_VOICE_READY, this );
mIntentManager.registerIntentListener( MogoReceiver.ACTION_MOCK, this );
mADASController = apis.getAdasControllerApi();
mLauncher = apis.getLauncherApi();
mFragmentManager = apis.getFragmentManagerApi();
mCardManager = apis.getCardManagerApi();
mFragmentManager.addMainFragmentStackTransactionListener( this );
initWorkThread();
}
@@ -364,6 +373,7 @@ public class MogoServices implements IMogoMapListener,
filter.addAction( MogoReceiver.ACTION_VOICE_UI );
filter.addAction( MogoReceiver.ACTION_ADAS_STATUS );
filter.addAction( MogoReceiver.ACTION_VOICE_READY );
filter.addAction( MogoReceiver.ACTION_MOCK );
try {
context.getApplicationContext().registerReceiver( mAIAssistReceiver, filter );
Logger.i( TAG, "register voice receiver." );
@@ -609,7 +619,7 @@ public class MogoServices implements IMogoMapListener,
@Override
public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) {
Logger.d( TAG, "状态发生改变---descriptor---" + descriptor + "----isTrue---" + isTrue );
//Logger.d( TAG, "状态发生改变---descriptor---" + descriptor + "----isTrue---" + isTrue );
switch ( descriptor ) {
case USER_INTERACTED:
if ( isTrue ) {
@@ -630,17 +640,9 @@ public class MogoServices implements IMogoMapListener,
case ADAS_UI:
try {
if ( isTrue ) {
// ADAS 时,不在自动刷新打点策略
stopAutoRefreshStrategy();
// 清除所有的打点信息记录
MarkerServiceHandler.getMapMarkerManager().alreadySmallMarker.clear();
onAdasOn();
} else {
// 主动刷新
refreshStrategy();
// ADAS关闭后打开打点策略
if ( mAutoRefreshCallback != null ) {
mAutoRefreshCallback.onSuccess();
}
onAdasClosed();
}
} catch ( Exception e ) {
e.printStackTrace();
@@ -656,6 +658,21 @@ public class MogoServices implements IMogoMapListener,
}
}
private void onAdasOn() {
// ADAS 时,不在自动刷新打点策略
stopAutoRefreshStrategy();
// 清除所有的打点信息记录
MarkerServiceHandler.getMapMarkerManager().alreadySmallMarker.clear();
}
private void onAdasClosed() {
refreshStrategy();
// ADAS关闭后打开打点策略
if ( mAutoRefreshCallback != null ) {
mAutoRefreshCallback.onSuccess();
}
}
public void restartAutoRefreshAtTime( int time ) {
if ( time < 0 ) {
Logger.w( TAG, "ignore refresh request case time < 0" );
@@ -723,10 +740,13 @@ public class MogoServices implements IMogoMapListener,
}
int status = intent.getIntExtra( MogoReceiver.PARAM_ADAS_STATUS, 0 );
mStatusManager.setADASUIShow( ServiceConst.TYPE, status == 1 );
if ( status != 1 ) {
if ( status != 1 ) { // adas 关闭
mUiController.setLockZoom( ServiceConst.DEFAULT_LOCK_CAR_ZOOM_LEVEL );
// 延时两秒执行是为了让其它事物完成
UiThreadHandler.postDelayed( () -> {
mUiController.showMyLocation( true );
}, 2_000L );
}
mUiController.showMyLocation( true );
} else if ( Intent.ACTION_POWER_CONNECTED.equals( command ) ) {
mStatusManager.setAccStatus( ServiceConst.TYPE, true );
} else if ( Intent.ACTION_POWER_DISCONNECTED.equals( command ) ) {
@@ -774,6 +794,7 @@ public class MogoServices implements IMogoMapListener,
CarStateInfo stateInfo = GsonUtil.objectFromJson( msg, CarStateInfo.class );
if ( stateInfo != null ) {
changeCarHeadstockDirection( stateInfo.getValues().getHeading() );
// changeMyLocation( stateInfo.getValues() );
}
} else if ( ServiceConst.COMMAND_OPERATION.equals( command ) ) {
try {
@@ -788,8 +809,22 @@ public class MogoServices implements IMogoMapListener,
} catch ( JSONException e ) {
e.printStackTrace();
}
} else if( MogoReceiver.ACTION_VOICE_READY.equals( command ) ){
} else if ( MogoReceiver.ACTION_VOICE_READY.equals( command ) ) {
AIAssist.getInstance( mContext ).flush();
} else if ( ServiceConst.COMMAND_MY_LOCATION.equals( command ) ) {
if ( mStatusManager.isSearchUIShow() ) {
return;
}
if ( mStatusManager.isMainPageOnResume() ) {
mUiController.recoverLockMode();
}
} else if ( MogoReceiver.ACTION_MOCK.equals( command ) ) {
final int oper = intent.getIntExtra( "oper", -1 );
switch ( oper ) {
case 1:
mUiController.showMyLocation( true );
break;
}
}
}
@@ -828,7 +863,7 @@ public class MogoServices implements IMogoMapListener,
return false;
}
private void changeCarHeadstockDirection( double degree ) {
private void changeCarHeadstockDirection( final double degree ) {
if ( mNavi.isNaviing() ) {
return;
}
@@ -841,7 +876,26 @@ public class MogoServices implements IMogoMapListener,
if ( mUiController.getCurrentUiMode() != EnumMapUI.NorthUP_2D ) {
return;
}
mUiController.showMyLocation( ( ( float ) degree ) );
UiThreadHandler.post( () -> {
mUiController.showMyLocation( inflateCursorView( degree ) );
} );
}
private View inflateCursorView( double degree ) {
View view = View.inflate( mContext, R.layout.map_amap_cursor, null );
view.setRotation( ( float ) degree );
return view;
}
private void changeMyLocation( CarStateInfo.ValuesBean valuesBean ) {
if ( valuesBean == null ) {
return;
}
Location location = new Location( LocationManager.GPS_PROVIDER );
location.setAltitude( valuesBean.getAlt() );
location.setLatitude( valuesBean.getLat() );
location.setLongitude( valuesBean.getLon() );
}
/**
@@ -854,6 +908,7 @@ public class MogoServices implements IMogoMapListener,
mInternalUnWakeupRegisterStatus = true;
AIAssist.getInstance( mContext ).registerUnWakeupCommand( ServiceConst.CMD_UN_WAKE_PREV, ServiceConst.CMD_UN_WAKE_PREV_UN_WAKE_WORDS, this );
AIAssist.getInstance( mContext ).registerUnWakeupCommand( ServiceConst.CMD_UN_WAKE_NEXT, ServiceConst.CMD_UN_WAKE_NEXT_UN_WAKE_WORDS, this );
AIAssist.getInstance( mContext ).registerUnWakeupCommand( ServiceConst.CMD_UN_WAKEUP_MY_LOCATION, ServiceConst.CMD_UN_WAKEUP_WORDS_MY_LOCATION, this );
}
/**
@@ -866,6 +921,7 @@ public class MogoServices implements IMogoMapListener,
mInternalUnWakeupRegisterStatus = false;
AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ServiceConst.CMD_UN_WAKE_PREV, this );
AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ServiceConst.CMD_UN_WAKE_NEXT, this );
AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ServiceConst.CMD_UN_WAKEUP_MY_LOCATION, this );
}
@Override
@@ -874,6 +930,12 @@ public class MogoServices implements IMogoMapListener,
mActionManager.invoke( MapMarkerManager.getInstance().getCurrentModuleName(), MogoAction.Prev );
} else if ( TextUtils.equals( ServiceConst.CMD_UN_WAKE_NEXT, cmd ) ) {
mActionManager.invoke( MapMarkerManager.getInstance().getCurrentModuleName(), MogoAction.Next );
} else if ( TextUtils.equals( ServiceConst.CMD_UN_WAKEUP_MY_LOCATION, cmd ) ) {
if ( mStatusManager.isMainPageOnResume() ) {
mUiController.recoverLockMode();
}
} else if ( TextUtils.equals( ServiceConst.CMD_BACK, cmd ) ) {
mFragmentManager.clearAll();
}
}
@@ -896,4 +958,16 @@ public class MogoServices implements IMogoMapListener,
public void onSpeakSelectTimeOut( String speakText ) {
}
@Override
public void onTransaction( int size ) {
if ( size == 0 ) {
mUiController.setPointToCenter( 0.66145, 0.661094 );
AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ServiceConst.CMD_BACK );
} else {
AIAssist.getInstance( mContext ).registerUnWakeupCommand( ServiceConst.CMD_BACK, ServiceConst.CMD_BACK_WORDS, this );
mUiController.setPointToCenter( 0.5, 0.5 );
}
}
}

View File

@@ -137,5 +137,20 @@ public class ServiceConst {
*/
public static final String COMMAND_OPERATION = "system.application.operation";
/**
* 回到自车
*/
public static final String COMMAND_MY_LOCATION = "com.zhidao.desk.backToMyLocation";
public static final String CMD_UN_WAKEUP_MY_LOCATION = "CMD_UN_WAKEUP_MY_LOCATION";
public static final String[] CMD_UN_WAKEUP_WORDS_MY_LOCATION = new String[]{
"回到我的位置",
"返回我的位置",
"定位我的位置"
};
public static final String CMD_BACK = "back";
public static final String[] CMD_BACK_WORDS = new String[]{"关闭", "返回"};
}

View File

@@ -151,6 +151,26 @@ public class MapMarkerInfoView extends MapMarkerBaseView {
clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_dark_green_info);
ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_dark_green);
break;
case MarkerPoiTypeEnum.FOURS_FOG:
ivIcon.setImageResource(R.drawable.module_service_ic_rc_dark_frog2);
clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_grey_info);
ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_grey);
break;
case MarkerPoiTypeEnum.FOURS_ICE:
ivIcon.setImageResource(R.drawable.module_service_ic_rc_freeze2);
clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_blue_info);
ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_blue);
break;
case MarkerPoiTypeEnum.FOURS_PARKING:
ivIcon.setImageResource(R.drawable.module_service_ic_rc_parking2);
clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_dark_blue_info);
ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_dark_blue);
break;
case MarkerPoiTypeEnum.FOURS_ACCIDENT:
ivIcon.setImageResource(R.drawable.module_service_ic_rc_accident2);
clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_red_info);
ivReverseTriangle.setImageResource(R.drawable.bg_shape_reverse_triangle_red);
break;
default:
ivIcon.setImageResource(R.drawable.icon_map_marker_shear_news);
clMarkerContent.setBackgroundResource(R.drawable.bg_map_marker_dark_blue_info);

View File

@@ -340,6 +340,10 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
return;
}
if ( MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ) {
return;
}
// 解析不同的Marker类型然后对应的进行绘制
mLastDataResult = response.getResult();
@@ -392,6 +396,10 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
return;
}
if ( MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() ) {
return;
}
if ( TextUtils.isEmpty( mCurrentModuleName ) ) {
// 默认大而全
mCurrentModuleName = ServiceConst.CARD_TYPE_BUSINESS_OPERATION;

View File

@@ -130,6 +130,18 @@ public class MapMarkerView extends MapMarkerBaseView {
ivIcon.setImageResource(R.drawable.icon_map_marker_shop);
ivBg.setImageResource(R.drawable.bg_map_marker_green_dark);
break;
case MarkerPoiTypeEnum.FOURS_FOG:
ivBg.setImageResource(R.drawable.module_service_ic_rc_dark_frog);
break;
case MarkerPoiTypeEnum.FOURS_ICE:
ivBg.setImageResource(R.drawable.module_service_ic_rc_freeze);
break;
case MarkerPoiTypeEnum.FOURS_PARKING:
ivBg.setImageResource(R.drawable.module_service_ic_rc_parking);
break;
case MarkerPoiTypeEnum.FOURS_ACCIDENT:
ivBg.setImageResource(R.drawable.module_service_ic_rc_accident);
break;
default:
ivIcon.setImageResource(R.drawable.icon_map_marker_shear_news);
ivBg.setImageResource(R.drawable.bg_map_marker_blue_dark);

View File

@@ -55,6 +55,8 @@ public class MogoReceiver extends BroadcastReceiver {
*/
public static final String ACTION_VOICE_READY = "com.zhidao.auto.AIAssist.ready";
public static final String ACTION_MOCK = "com.mogo.mock";
private IMogoIntentManager mMogoIntentManager;
public MogoReceiver( Context context ) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 902 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<gradient
android:angle="90"
android:endColor="#B5B5B5"
android:startColor="#4D4F64 " />
<corners android:radius="360dp" />
<padding
android:bottom="@dimen/dp_6"
android:left="@dimen/dp_6"
android:right="@dimen/dp_40"
android:top="@dimen/dp_6" />
</shape >

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/shape_id" >
<!-- 倒三角 -->
<rotate
android:fromDegrees="45"
android:pivotX="135%"
android:pivotY="15%"
android:toDegrees="45" >
<shape android:shape="rectangle" >
<size android:width="@dimen/dp_20"
android:height="@dimen/dp_20"/>
<solid android:color="#4D4F64" />
</shape >
</rotate >
</item >
</layer-list >

View File

@@ -6,8 +6,13 @@ import android.content.Intent;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.map.MogoOverlayManager;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.adas.IMogoADASController;
import com.mogo.service.impl.MogoServiceApis;
import com.mogo.service.impl.singleton.SingletonsHolder;
import com.mogo.service.impl.statusmanager.MogoStatusManager;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.utils.logger.Logger;
import org.json.JSONObject;
@@ -33,8 +38,15 @@ public class MogoADASController implements IMogoADASController {
public static final String VAL_OPEN = "打开";
public static final String VAL_CLOSE = "关闭";
private MogoStatusManager mStatusManager = SingletonsHolder.get( IMogoStatusManager.class );
@Override
public void openADAS() {
if ( mStatusManager.isADASShow() ) {
return;
}
Intent intent = new Intent( ACTION );
intent.putExtra( PARAM_COMMAND, VAL_COMMAND );
JSONObject object = new JSONObject();
@@ -50,6 +62,11 @@ public class MogoADASController implements IMogoADASController {
@Override
public void closeADAS() {
if ( !mStatusManager.isADASShow() ) {
return;
}
Intent intent = new Intent( ACTION );
intent.putExtra( PARAM_COMMAND, VAL_COMMAND );
JSONObject object = new JSONObject();