diff --git a/app/build.gradle b/app/build.gradle index e90b27d6bf..f7fac3e35b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,10 +21,10 @@ android { multiDexEnabled true externalNativeBuild { -// ndk { -// // 设置支持的SO库架构 -// abiFilters 'armeabi-v7a' -// } + ndk { + // 设置支持的SO库架构 + abiFilters 'armeabi-v7a' + } } } signingConfigs { diff --git a/config.gradle b/config.gradle index cb393debf5..498afc9c99 100644 --- a/config.gradle +++ b/config.gradle @@ -5,7 +5,7 @@ ext { buildToolsVersion: "29.0.2", minSdkVersion : 19, targetSdkVersion : 22, - versionCode : 2, + versionCode : 3, versionName : "1.0.2", ] diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java index 107c7770c8..f3f83666ce 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java @@ -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 ) ); } } diff --git a/foudations/mogo-utils/src/main/java/com/mogo/utils/WorkThreadHandler.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/WorkThreadHandler.java new file mode 100644 index 0000000000..cb4f6a2c86 --- /dev/null +++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/WorkThreadHandler.java @@ -0,0 +1,65 @@ +package com.mogo.utils; + +import android.os.Handler; +import android.os.HandlerThread; + +/** + * @author congtaowang + * @since 2020-03-23 + *
+ * 描述
+ */
+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 );
+ }
+ }
+}
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java
index b163ede5f4..d758bc0bb3 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java
@@ -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 );
+ }
+ }
}
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapWrapper.java
index 6372fcd37f..2632beced8 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapWrapper.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapWrapper.java
@@ -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;
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AMapNaviListenerAdapter.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AMapNaviListenerAdapter.java
index 8584b96289..b851ca258c 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AMapNaviListenerAdapter.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AMapNaviListenerAdapter.java
@@ -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
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java
index 279a4b5afa..e24f8944e7 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java
@@ -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() {
};
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java
index bf95e060c4..b89eca72b5 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java
@@ -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 );
}
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java
index 5359900ed7..106fd6a073 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java
@@ -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 );
}
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/overlay/RouteOverLayWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/overlay/RouteOverLayWrapper.java
index 04313edf32..c5a6857603 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/overlay/RouteOverLayWrapper.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/overlay/RouteOverLayWrapper.java
@@ -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;
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java
index e935f49f8b..2509ae321e 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java
@@ -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 );
+ }
+ }
}
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/utils/MapStyleUtils.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/utils/MapStyleUtils.java
index 3e46637f0f..e91cd51b88 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/utils/MapStyleUtils.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/utils/MapStyleUtils.java
@@ -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;
}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java
index 3e946b4acd..bd2d6aeef6 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java
@@ -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 );
/**
* 锁车
diff --git a/libraries/mogo-map-api/src/main/res/drawable-ldpi/map_api_ic_current_location.png b/libraries/mogo-map-api/src/main/res/drawable-ldpi/map_api_ic_current_location.png
deleted file mode 100755
index 70be2a654c..0000000000
Binary files a/libraries/mogo-map-api/src/main/res/drawable-ldpi/map_api_ic_current_location.png and /dev/null differ
diff --git a/libraries/mogo-map-api/src/main/res/drawable-ldpi/map_api_ic_current_location2.png b/libraries/mogo-map-api/src/main/res/drawable-ldpi/map_api_ic_current_location2.png
index e7914a741e..5219b2f620 100644
Binary files a/libraries/mogo-map-api/src/main/res/drawable-ldpi/map_api_ic_current_location2.png and b/libraries/mogo-map-api/src/main/res/drawable-ldpi/map_api_ic_current_location2.png differ
diff --git a/libraries/mogo-map-api/src/main/res/drawable-xhdpi/map_api_ic_current_location.png b/libraries/mogo-map-api/src/main/res/drawable-xhdpi/map_api_ic_current_location.png
deleted file mode 100644
index 65cecf9af2..0000000000
Binary files a/libraries/mogo-map-api/src/main/res/drawable-xhdpi/map_api_ic_current_location.png and /dev/null differ
diff --git a/libraries/mogo-map-api/src/main/res/drawable-xhdpi/map_api_ic_current_location2.png b/libraries/mogo-map-api/src/main/res/drawable-xhdpi/map_api_ic_current_location2.png
index 8f8e62bae4..a4486144b2 100644
Binary files a/libraries/mogo-map-api/src/main/res/drawable-xhdpi/map_api_ic_current_location2.png and b/libraries/mogo-map-api/src/main/res/drawable-xhdpi/map_api_ic_current_location2.png differ
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java
index 45e7b8abb5..83d2d655a8 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java
@@ -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 );
+ }
+ }
}
diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java
index d3f3549d29..6fae9abca7 100644
--- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java
+++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java
@@ -177,10 +177,6 @@ public class AppNavigatorFragment extends MvpFragment
* 描述
*/
-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 );
}
}
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java
index e7984a154e..9578f5079f 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java
@@ -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 );
diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
index be9d8f248c..55c93e14dd 100644
--- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
+++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
@@ -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
+ *
+ * 业务切换则由业务控制
+ */
+ 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
diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java
index 12db43890c..7979fa545e 100644
--- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java
+++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java
@@ -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();
}
/**
diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/HorizentalStackTransformer.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/HorizentalStackTransformer.java
index 16f7ea21f6..bec1449b7c 100644
--- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/HorizentalStackTransformer.java
+++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/HorizentalStackTransformer.java
@@ -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;
}
diff --git a/modules/mogo-module-main/src/main/res/drawable-ldpi/module_apps_bg_card.png b/modules/mogo-module-main/src/main/res/drawable-ldpi/module_apps_bg_card.png
index 50943aa8c9..de1e81e0d9 100644
Binary files a/modules/mogo-module-main/src/main/res/drawable-ldpi/module_apps_bg_card.png and b/modules/mogo-module-main/src/main/res/drawable-ldpi/module_apps_bg_card.png differ
diff --git a/modules/mogo-module-main/src/main/res/drawable-xhdpi/module_apps_bg_card.png b/modules/mogo-module-main/src/main/res/drawable-xhdpi/module_apps_bg_card.png
index d2b6a05cb6..a82b29541a 100644
Binary files a/modules/mogo-module-main/src/main/res/drawable-xhdpi/module_apps_bg_card.png and b/modules/mogo-module-main/src/main/res/drawable-xhdpi/module_apps_bg_card.png differ
diff --git a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml
index 0d8eeb964d..6be848e190 100644
--- a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml
+++ b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml
@@ -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"
diff --git a/modules/mogo-module-main/src/main/res/values-ldpi/dimens.xml b/modules/mogo-module-main/src/main/res/values-ldpi/dimens.xml
index aaf70a0598..f94f83a779 100644
--- a/modules/mogo-module-main/src/main/res/values-ldpi/dimens.xml
+++ b/modules/mogo-module-main/src/main/res/values-ldpi/dimens.xml
@@ -14,5 +14,6 @@