This commit is contained in:
wangcongtao
2020-01-16 15:12:55 +08:00
parent 178e73206c
commit ad6be2aa69
22 changed files with 559 additions and 93 deletions

View File

@@ -109,20 +109,20 @@ public abstract class AMapNaviListenerAdapter implements AMapNaviListener {
@Override
public void updateCameraInfo( AMapNaviCameraInfo[] aMapNaviCameraInfos ) {
if ( aMapNaviCameraInfos != null ) {
for ( AMapNaviCameraInfo aMapNaviCameraInfo : aMapNaviCameraInfos ) {
if ( aMapNaviCameraInfo != null ) {
Logger.i( TAG, "current camera speed: %d", aMapNaviCameraInfo.getCameraSpeed() );
}
}
}
}
@Override
public void updateIntervalCameraInfo( AMapNaviCameraInfo aMapNaviCameraInfo, AMapNaviCameraInfo aMapNaviCameraInfo1, int i ) {
if ( aMapNaviCameraInfo != null ) {
Logger.i( TAG, "current camera speed: %d, status = %d", aMapNaviCameraInfo.getCameraSpeed(), i );
}
if ( aMapNaviCameraInfo1 != null ) {
Logger.i( TAG, "current camera speed: %d, status = %d", aMapNaviCameraInfo1.getCameraSpeed(), i );
}
}
@Override
public void onServiceAreaUpdate( AMapServiceAreaInfo[] aMapServiceAreaInfos ) {
@@ -188,11 +188,23 @@ public abstract class AMapNaviListenerAdapter implements AMapNaviListener {
}
/**
* 巡航回调
* 连续5个点速度大于15km/h后触发 updateAimlessModeStatistics 回调,通过 AimLessModeStat 对象可获取巡航的连续行驶距离和连续启用时间
*
* @param aimLessModeStat
*/
@Override
public void updateAimlessModeStatistics( AimLessModeStat aimLessModeStat ) {
}
/**
* 巡航回调
* 出现拥堵长度大于500米且拥堵时间大于5分钟时会进到 updateAimlessModeCongestionInfo 回调中,通过 AimLessModeCongestionInfo 对象,可获取到道路拥堵信息(如:导致拥堵的事件类型、拥堵的状态等)
*
* @param aimLessModeCongestionInfo
*/
@Override
public void updateAimlessModeCongestionInfo( AimLessModeCongestionInfo aimLessModeCongestionInfo ) {

View File

@@ -0,0 +1,204 @@
package com.mogo.map.impl.amap.navi;
import com.amap.api.navi.AimlessModeListener;
import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
import com.amap.api.navi.model.AimLessModeCongestionInfo;
import com.amap.api.navi.model.AimLessModeStat;
import com.mogo.map.navi.MogoNaviListenerHandler;
import com.mogo.map.navi.MogoTraffic;
/**
* @author congtaowang
* @since 2020-01-16
* <p>
* 巡航监听
*/
public class AimlessModeListenerAdapter implements AimlessModeListener {
@Override
public void onUpdateTrafficFacility( AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos ) {
if ( aMapNaviTrafficFacilityInfos == null || aMapNaviTrafficFacilityInfos.length == 0 ) {
return;
}
int speedLimit = 0;
for ( AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo : aMapNaviTrafficFacilityInfos ) {
if ( aMapNaviTrafficFacilityInfo == null ) {
continue;
}
speedLimit = aMapNaviTrafficFacilityInfo.getLimitSpeed();
if ( aMapNaviTrafficFacilityInfo.getBroadcastType() == 4 && aMapNaviTrafficFacilityInfo.getLimitSpeed() > 0 ) {
MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_AIM );
traffic.setDistance( aMapNaviTrafficFacilityInfo.getDistance() );
traffic.setSpeedLimit( aMapNaviTrafficFacilityInfo.getLimitSpeed() );
traffic.setDesc( "测速摄像头、测速雷达" );
MogoNaviListenerHandler.getInstance().onUpdateTraffic( traffic );
}
}
if ( speedLimit <= 0 ) {
MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_AIM );
traffic.setDistance( 0 );
traffic.setSpeedLimit( 0 );
traffic.setDesc( "测速摄像头、测速雷达" );
MogoNaviListenerHandler.getInstance().onUpdateTraffic( traffic );
}
// MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_AIM );
// traffic.setDistance( aMapNaviTrafficFacilityInfos[0].getDistance() );
// traffic.setSpeedLimit( aMapNaviTrafficFacilityInfos[0].getLimitSpeed() );
// switch ( aMapNaviTrafficFacilityInfos[0].getBroadcastType() ) {
// case 0:
// traffic.setDesc( "未知道路设施" );
// break;
// case 4:
// traffic.setDesc( "测速摄像头、测速雷达" );
// break;
// case 5:
// traffic.setDesc( "违章摄像头" );
// break;
// case 10:
// traffic.setDesc( "请谨慎驾驶" );
// break;
// case 11:
// traffic.setDesc( "有连续拍照" );
// break;
// case 12:
// traffic.setDesc( "铁路道口" );
// break;
// case 13:
// traffic.setDesc( "注意落石(左侧)" );
// break;
// case 14:
// traffic.setDesc( "事故易发地段" );
// break;
// case 15:
// traffic.setDesc( "易滑" );
// break;
// case 16:
// traffic.setDesc( "村庄" );
// break;
// case 18:
// traffic.setDesc( "前方学校" );
// break;
// case 19:
// traffic.setDesc( "有人看管的铁路道口" );
// break;
// case 20:
// traffic.setDesc( "无人看管的铁路道口" );
// break;
// case 21:
// traffic.setDesc( "两侧变窄" );
// break;
// case 22:
// traffic.setDesc( "向左急弯路" );
// break;
// case 23:
// traffic.setDesc( "向右急弯路" );
// break;
// case 24:
// traffic.setDesc( "反向弯路" );
// break;
// case 25:
// traffic.setDesc( "连续弯路" );
// break;
// case 26:
// traffic.setDesc( "左侧合流标识牌" );
// break;
// case 27:
// traffic.setDesc( "右侧合流标识牌" );
// break;
// case 28:
// traffic.setDesc( "监控摄像头" );
// break;
// case 29:
// traffic.setDesc( "专用道摄像头" );
// break;
// case 31:
// traffic.setDesc( "禁止超车" );
// break;
// case 36:
// traffic.setDesc( "右侧变窄" );
// break;
// case 37:
// traffic.setDesc( "左侧变窄" );
// break;
// case 38:
// traffic.setDesc( "窄桥" );
// break;
// case 39:
// traffic.setDesc( "左右绕行" );
// break;
// case 40:
// traffic.setDesc( "左侧绕行" );
// break;
// case 41:
// traffic.setDesc( "右侧绕行" );
// break;
// case 42:
// traffic.setDesc( "注意落石(右侧)" );
// break;
// case 43:
// traffic.setDesc( "傍山险路(左侧)" );
// break;
// case 44:
// traffic.setDesc( "傍山险路(右侧)" );
// break;
// case 47:
// traffic.setDesc( "上陡坡" );
// break;
// case 48:
// traffic.setDesc( "下陡坡" );
// break;
// case 49:
// traffic.setDesc( "过水路面" );
// break;
// case 50:
// traffic.setDesc( "路面不平" );
// break;
// case 52:
// traffic.setDesc( "慢行" );
// break;
// case 53:
// traffic.setDesc( "注意危险" );
// break;
// case 58:
// traffic.setDesc( "隧道" );
// break;
// case 59:
// traffic.setDesc( "渡口" );
// break;
// case 92:
// traffic.setDesc( "闯红灯" );
// break;
// case 93:
// traffic.setDesc( "应急车道" );
// break;
// case 94:
// traffic.setDesc( "非机动车道" );
// break;
// case 100:
// traffic.setDesc( "不绑定电子眼高发地" );
// break;
// case 101:
// traffic.setDesc( "车道违章" );
// break;
// case 102:
// traffic.setDesc( "超速违章" );
// break;
// }
}
@Override
public void onUpdateAimlessModeElecCameraInfo( AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos ) {
}
@Override
public void updateAimlessModeStatistics( AimLessModeStat aimLessModeStat ) {
}
@Override
public void updateAimlessModeCongestionInfo( AimLessModeCongestionInfo aimLessModeCongestionInfo ) {
}
}

View File

@@ -5,6 +5,7 @@ import android.graphics.Rect;
import com.amap.api.maps.model.Polyline;
import com.amap.api.navi.AMapNavi;
import com.amap.api.navi.enums.AimLessMode;
import com.amap.api.navi.enums.NaviType;
import com.amap.api.navi.model.NaviLatLng;
import com.mogo.map.MogoLatLng;
@@ -32,6 +33,9 @@ public class NaviClient implements IMogoNavi {
private AMapNavi mAMapNavi;
private final NaviListenerAdapter mAMapNaviListener;
private final AimlessModeListenerAdapter mAimlessModeListener;
/**
* 导航策略配置
*/
@@ -45,7 +49,10 @@ public class NaviClient implements IMogoNavi {
mAMapNavi.setEmulatorNaviSpeed( 120 );
mAMapNavi.setUseInnerVoice( true );
mAMapNaviListener = new NaviListenerAdapter( context, mAMapNavi, this );
mAimlessModeListener = new AimlessModeListenerAdapter() {
};
mAMapNavi.addAMapNaviListener( mAMapNaviListener );
mAMapNavi.addAimlessModeListener( mAimlessModeListener );
}
public static NaviClient getInstance( Context context ) {
@@ -123,6 +130,8 @@ public class NaviClient implements IMogoNavi {
if ( mAMapNaviListener != null ) {
mAMapNaviListener.stopNavi();
}
// 开启巡航 巡航时返回电子眼和特殊道路设施信息
mAMapNavi.startAimlessMode( AimLessMode.CAMERA_AND_SPECIALROAD_DETECTED );
}
@@ -131,6 +140,8 @@ public class NaviClient implements IMogoNavi {
if ( mAMapNaviListener.isStopped() ) {
return;
}
// 关闭巡航
mAMapNavi.stopAimlessMode();
mIsRealNavi = isRealNavi;
mAMapNavi.startNavi( isRealNavi ? NaviType.GPS : NaviType.EMULATOR );
}
@@ -176,16 +187,18 @@ public class NaviClient implements IMogoNavi {
@Override
public void setCalculatePathDisplayBounds( Rect bounds ) {
if ( mAMapNaviListener != null ) {
mAMapNaviListener.setCalculatePathDisplayBounds(bounds);
mAMapNaviListener.setCalculatePathDisplayBounds( bounds );
}
}
@Override public MogoNaviConfig getNaviConfig() {
@Override
public MogoNaviConfig getNaviConfig() {
return mMogoNaviConfig;
}
@Override public boolean setBroadcastMode(int mode) {
return mAMapNavi.setBroadcastMode(mode);
@Override
public boolean setBroadcastMode( int mode ) {
return mAMapNavi.setBroadcastMode( mode );
}
// -- end

View File

@@ -5,8 +5,13 @@ import android.graphics.Rect;
import com.amap.api.maps.model.Polyline;
import com.amap.api.navi.AMapNavi;
import com.amap.api.navi.AimlessModeListener;
import com.amap.api.navi.enums.AimLessMode;
import com.amap.api.navi.enums.CameraType;
import com.amap.api.navi.enums.CarEnterCameraStatus;
import com.amap.api.navi.enums.NaviType;
import com.amap.api.navi.model.AMapCalcRouteResult;
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;
@@ -15,6 +20,7 @@ import com.mogo.map.impl.amap.message.AMapMessageManager;
import com.mogo.map.impl.amap.utils.ObjectUtils;
import com.mogo.map.navi.MogoCalculatePath;
import com.mogo.map.navi.MogoNaviListenerHandler;
import com.mogo.map.navi.MogoTraffic;
import com.mogo.map.navi.OnCalculatePathItemClickInteraction;
import com.mogo.utils.logger.Logger;
@@ -86,14 +92,77 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter {
}
@Override
public void onStartNavi( int i ) {
setStopped( false );
setNaviing( true );
if ( mAMapNavi != null ) {
mAMapNavi.startSpeak();
public void updateCameraInfo( AMapNaviCameraInfo[] aMapNaviCameraInfos ) {
super.updateCameraInfo( aMapNaviCameraInfos );
if ( aMapNaviCameraInfos == null || aMapNaviCameraInfos.length == 0 ) {
return;
}
int limitSpeed = 0;
for ( AMapNaviCameraInfo aMapNaviCameraInfo : aMapNaviCameraInfos ) {
if ( aMapNaviCameraInfo == null ) {
continue;
}
limitSpeed = aMapNaviCameraInfo.getCameraSpeed();
if ( limitSpeed > 0 && aMapNaviCameraInfo.getCameraType() == CameraType.SPEED ) {
MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_NAVI );
traffic.setDistance( aMapNaviCameraInfo.getCameraDistance() );
traffic.setSpeedLimit( aMapNaviCameraInfo.getCameraSpeed() );
traffic.setDesc( "测速摄像" );
MogoNaviListenerHandler.getInstance().onUpdateTraffic( traffic );
}
// switch ( aMapNaviCameraInfo.getCameraType() ) {
// case CameraType.SPEED:
//
// break;
// case CameraType.SURVEILLANCE:
// traffic.setDesc( "监控摄像" );
// break;
// case CameraType.TRAFFICLIGHT:
// traffic.setDesc( "闯红灯拍照" );
// break;
// case CameraType.BREAKRULE:
// traffic.setDesc( "违章拍照" );
// break;
// case CameraType.BUSWAY:
// traffic.setDesc( "公交专用道摄像头" );
// break;
// case CameraType.EMERGENCY:
// traffic.setDesc( "应急车道拍照" );
// break;
// case CameraType.BICYCLE:
// traffic.setDesc( "非机动车道" );
// break;
// case CameraType.INTERVALVELOCITYSTART:
// traffic.setDesc( "区间测速起始" );
// break;
// case CameraType.INTERVALVELOCITYEND:
// traffic.setDesc( "区间测速解除" );
// break;
// }
}
if ( limitSpeed <= 0 ) {
MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_NAVI );
traffic.setDistance( 0 );
traffic.setSpeedLimit( 0 );
traffic.setDesc( "测速摄像" );
MogoNaviListenerHandler.getInstance().onUpdateTraffic( traffic );
}
}
@Override
public void onStartNavi( int type ) {
// 巡航
if ( type != NaviType.CRUISE ) {
setStopped( false );
setNaviing( true );
if ( mAMapNavi != null ) {
mAMapNavi.startSpeak();
}
MogoNaviListenerHandler.getInstance().onStartNavi();
AMapMessageManager.getInstance().postNaviStarted();
}
MogoNaviListenerHandler.getInstance().onStartNavi();
AMapMessageManager.getInstance().postNaviStarted();
}
@Override
@@ -175,15 +244,15 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter {
}
}
public void clearCalculatePaths(){
public void clearCalculatePaths() {
if ( mNaviOverlayHelper != null ) {
mNaviOverlayHelper.clearCalculatedOverlay();
}
}
public void setCalculatePathDisplayBounds( Rect bounds ){
public void setCalculatePathDisplayBounds( Rect bounds ) {
if ( mNaviOverlayHelper != null ) {
mNaviOverlayHelper.setCalculatePathDisplayBounds(bounds);
mNaviOverlayHelper.setCalculatePathDisplayBounds( bounds );
}
}
}

View File

@@ -63,7 +63,8 @@ public interface IMogoNavi {
*
* @param isRealNavi true - 实时导航 false - 模拟导航
*/
void startNavi( boolean isRealNavi );
void
startNavi( boolean isRealNavi );
/**
* 是否正在导航

View File

@@ -44,4 +44,9 @@ public interface IMogoNaviListener {
* 路径规划失败
*/
void onoCalculateFailed();
/**
* 巡航信息发生改变
*/
void onUpdateTraffic(MogoTraffic traffic);
}

View File

@@ -91,4 +91,11 @@ public class MogoNaviListenerHandler implements IMogoNaviListener, IMogoNaviList
mDelegateListener.onoCalculateFailed();
}
}
@Override
public void onUpdateTraffic( MogoTraffic traffic ) {
if ( mDelegateListener != null ) {
mDelegateListener.onUpdateTraffic( traffic );
}
}
}

View File

@@ -0,0 +1,76 @@
package com.mogo.map.navi;
/**
* @author congtaowang
* @since 2020-01-16
* <p>
* 巡航信息、导航信息
*/
public class MogoTraffic {
/**
* 导航
*/
public static final int TYPE_NAVI = 1;
/**
* 巡航
*/
public static final int TYPE_AIM = 2;
/**
* 导航 or 巡航
*/
private int mFromType;
/**
* 距离
*/
private int mDistance;
/**
* 限速
*/
private int mSpeedLimit;
/**
* 描述
*/
private String mDesc;
public MogoTraffic( int fromType ) {
mFromType = fromType;
}
public int getFromType() {
return mFromType;
}
public void setFromType( int fromType ) {
this.mFromType = fromType;
}
public int getDistance() {
return mDistance;
}
public void setDistance( int distance ) {
this.mDistance = distance;
}
public int getSpeedLimit() {
return mSpeedLimit;
}
public void setSpeedLimit( int speedLimit ) {
this.mSpeedLimit = speedLimit;
}
public String getDesc() {
return mDesc;
}
public void setDesc( String desc ) {
this.mDesc = desc;
}
}

View File

@@ -23,6 +23,7 @@ import com.mogo.map.model.MogoPoi;
import com.mogo.map.navi.IMogoNavi;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.map.navi.MogoNaviInfo;
import com.mogo.map.navi.MogoTraffic;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.MogoModulePaths;
@@ -41,6 +42,7 @@ import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.service.module.IMogoRegisterCenter;
import com.mogo.service.windowview.IMogoWindowManager;
import com.mogo.utils.TipToast;
import java.util.HashMap;
/**
@@ -67,6 +69,10 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
private NaviInfoView mNaviInfo;
private TextView mExitNavi;
private View mSpeedLimit;
private TextView mSpeedLimitValue;
private View mSpeedLimitUnit;
private IMogoMapService mService;
private IMogoMapUIController mMApUIController;
private IMogoLocationClient mMogoLocationClient;
@@ -91,7 +97,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
@Override
protected void initViews() {
mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation();
mMogoAddressManager = (IMogoAddressManager) ARouter.getInstance().build( MogoServicePaths.PATH_ADDRESS_MANAGER ).navigation();
mMogoAddressManager = ( IMogoAddressManager ) ARouter.getInstance().build( MogoServicePaths.PATH_ADDRESS_MANAGER ).navigation();
mCommonAddress = findViewById( R.id.module_entrance_id_common_address );
mSearch = findViewById( R.id.module_entrance_id_search );
@@ -135,7 +141,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
mExitNavi.setOnClickListener( view -> {
if ( mMogoNavi != null ) {
if ( mIsLock ) {
NaviNoticeDialog naviNoticeDialog = new NaviNoticeDialog(getContext());
NaviNoticeDialog naviNoticeDialog = new NaviNoticeDialog( getContext() );
naviNoticeDialog.show();
} else {
mMApUIController.recoverLockMode();
@@ -143,6 +149,10 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
}
} );
mSpeedLimit = findViewById( R.id.module_entrance_id_speed_limit_container );
mSpeedLimitValue = findViewById( R.id.module_entrance_id_speed_limit_value );
mSpeedLimitUnit = findViewById( R.id.module_entrance_id_speed_limit_unit );
}
@NonNull
@@ -188,9 +198,9 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
mCommonAddress.setVisibility( View.GONE );
mNaviInfo.setVisibility( View.VISIBLE );
mExitNavi.setVisibility( View.VISIBLE );
AnalyticsUtils.track("Navigation_guide_type", new HashMap<>());
AnalyticsUtils.track( "Navigation_guide_type", new HashMap<>() );
mMApUIController.setPointToCenter(0.675926, 0.77552);
mMApUIController.setPointToCenter( 0.675926, 0.77552 );
}
@Override
@@ -198,9 +208,10 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
mCommonAddress.setVisibility( View.VISIBLE );
mNaviInfo.setVisibility( View.GONE );
mExitNavi.setVisibility( View.GONE );
AnalyticsUtils.track("Navigation_guide_type", new HashMap<>());
mSpeedLimit.setVisibility( View.GONE );
AnalyticsUtils.track( "Navigation_guide_type", new HashMap<>() );
mMApUIController.setPointToCenter(0.66145, 0.590688);
mMApUIController.setPointToCenter( 0.66145, 0.590688 );
}
@@ -212,6 +223,20 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
public void onoCalculateFailed() {
}
@Override
public void onUpdateTraffic( MogoTraffic traffic ) {
if ( traffic == null ) {
return;
}
if ( traffic.getSpeedLimit() <= 0 ) {
mSpeedLimit.setVisibility( View.INVISIBLE );
mSpeedLimitValue.setText( "--" );
} else {
mSpeedLimit.setVisibility( View.VISIBLE );
mSpeedLimitValue.setText( String.valueOf( traffic.getSpeedLimit() ) );
}
}
@Override
public void onMapLoaded() {

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<corners android:radius="90dp" />
<stroke android:width="@dimen/dp_6" android:color="#B92F49" />/>
</shape>
</item>
</selector>

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
@@ -71,6 +72,36 @@
</LinearLayout>
<LinearLayout
android:id="@+id/module_entrance_id_speed_limit_container"
android:layout_width="@dimen/dp_180"
android:layout_height="@dimen/dp_180"
android:layout_marginTop="@dimen/dp_2"
android:layout_marginRight="@dimen/dp_60"
android:background="@drawable/module_ext_dw_speed_limit_bkg"
android:gravity="center"
android:visibility="invisible"
android:orientation="vertical"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/module_entrance_id_speed_limit_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_60"
tools:text="100" />
<TextView
android:id="@+id/module_entrance_id_speed_limit_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="km/h"
android:textColor="#CCFFFFFF"
android:textSize="@dimen/dp_28" />
</LinearLayout>
<com.mogo.module.extensions.navi.NaviInfoView
android:id="@+id/module_entrance_id_navi_info_panel"
android:layout_width="wrap_content"

View File

@@ -6,8 +6,8 @@
android:layout_height="@dimen/dp_120"
android:background="@drawable/module_ext_dw_shadow_frame_bkg"
android:orientation="vertical"
android:paddingLeft="@dimen/dp_70"
android:paddingRight="@dimen/dp_70">
android:paddingLeft="@dimen/dp_60"
android:paddingRight="@dimen/dp_60">
<com.mogo.module.extensions.anim.JSurfaceView
android:id="@+id/module_ext_id_voice"

View File

@@ -5,7 +5,7 @@
<activity
android:name=".MainActivity"
android:clearTaskOnLaunch="true"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|mcc|mnc|keyboard|navigation"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:enabled="true"
android:launchMode="singleInstance"
android:resizeableActivity="true"

View File

@@ -99,13 +99,15 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
@Override
public void onPageSelected( int position ) {
try {
IMogoModuleProvider provider = mCardModulesAdapter.getProvider( mCurrentPosition );
trackLastCardShowEvent( provider );
mCurrentPosition = position;
final IMogoModuleProvider provider = mCardModulesAdapter.getProvider( position );
provider = mCardModulesAdapter.getProvider( mCurrentPosition );
mMogoModuleHandler.setEnable( provider.getModuleName() );
if ( !isClickMarker ) {
mMogoCardManager.invoke( position, mMogoModuleHandler.getCurrentModuleName() );
}
trackCardSelectedEvent( provider );
} catch ( Exception e ) {
e.printStackTrace();
}
@@ -129,7 +131,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
* 卡片展示时长埋点
* @param provider
*/
private void trackCardSelectedEvent( IMogoModuleProvider provider ) {
private void trackLastCardShowEvent( IMogoModuleProvider provider ) {
if ( provider == null ) {
return;
}

View File

@@ -19,6 +19,7 @@ import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.model.MogoPoi;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.map.navi.MogoNaviInfo;
import com.mogo.map.navi.MogoTraffic;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.module.common.MogoModule;
import com.mogo.module.common.MogoModulePaths;
@@ -462,6 +463,24 @@ public class MogoModulesManager implements MogoModulesHandler,
}
}
@Override
public void onUpdateTraffic( MogoTraffic traffic ) {
Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners();
if ( iterator == null ) {
return;
}
while ( iterator.hasNext() ) {
IMogoNaviListener listener = iterator.next();
if ( listener != null ) {
try {
listener.onUpdateTraffic(traffic);
} catch ( Exception e ) {
Logger.e( TAG, e, "error." );
}
}
}
}
@Override
public void onLocationChanged( MogoLocation location ) {
Iterator< IMogoLocationListener > iterator = MogoRegisterCenterHandler.getInstance().getLocationListeners();

View File

@@ -1,40 +0,0 @@
package com.mogo.module.main.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.text.TextUtils;
/**
* @author congtaowang
* @since 2020-01-02
* <p>
* 广播接收者
* <p>
* {@link Intent#ACTION_POWER_CONNECTED}
* {@link Intent#ACTION_POWER_DISCONNECTED}
*/
public class MogoReceiver extends BroadcastReceiver {
public static void register( Context context ) {
if ( context == null ) {
return;
}
IntentFilter inputFilter = new IntentFilter();
inputFilter.addAction( Intent.ACTION_POWER_CONNECTED );
inputFilter.addAction( Intent.ACTION_POWER_DISCONNECTED );
context.getApplicationContext().registerReceiver( new MogoReceiver(), inputFilter );
}
@Override
public void onReceive( Context context, Intent intent ) {
final String action = intent.getAction();
if ( TextUtils.equals( action, Intent.ACTION_POWER_CONNECTED ) ) {
}
if ( TextUtils.equals( action, Intent.ACTION_POWER_DISCONNECTED ) ) {
}
}
}

View File

@@ -41,7 +41,7 @@
<FrameLayout
android:layout_width="@dimen/dp_660"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_70">
android:layout_marginLeft="@dimen/dp_60">
<com.mogo.module.main.cards.OrientedViewPager
android:id="@+id/module_main_id_cards_container"

View File

@@ -8,6 +8,7 @@ import com.mogo.map.MogoLatLng
import com.mogo.map.navi.IMogoNaviListener
import com.mogo.map.navi.MogoCalculatePath
import com.mogo.map.navi.MogoNaviInfo
import com.mogo.map.navi.MogoTraffic
import com.mogo.map.search.inputtips.MogoTip
import com.mogo.module.common.MogoModulePaths
import com.mogo.module.navi.R
@@ -53,7 +54,10 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener {
override fun onoCalculateFailed() {
}
private lateinit var mAdapter: CalculatePathAdapter
override fun onUpdateTraffic(traffic: MogoTraffic?) {
}
private lateinit var mAdapter: CalculatePathAdapter
override fun getLayoutId(): Int {
return R.layout.fragment_search_category
}

View File

@@ -26,6 +26,7 @@ import com.mogo.map.marker.IMogoMarkerManager;
import com.mogo.map.model.MogoPoi;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.map.navi.MogoNaviInfo;
import com.mogo.map.navi.MogoTraffic;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.MogoModule;
@@ -46,8 +47,6 @@ import com.mogo.service.module.ModuleType;
import com.mogo.service.statusmanager.IMogoStatusChangedListener;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.service.statusmanager.StatusDescriptor;
import com.mogo.service.voice.IMogoVoiceListener;
import com.mogo.service.voice.IMogoVoiceManager;
import com.mogo.utils.logger.Logger;
import java.util.List;
@@ -239,8 +238,10 @@ public class MogoServiceProvider implements IMogoModuleProvider,
registerCenter.registerMogoMapListener( getModuleName(), this );
mIntentManager = ( IMogoIntentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_INTENT_MANAGER ).navigation( context );
mIntentManager.registerIntentListener( MogoReceiver.ADAS_ACTION, this );
mIntentManager.registerIntentListener( MogoReceiver.ACTIION_ADAS, this );
mIntentManager.registerIntentListener( Intent.ACTION_POWER_CONNECTED, this );
mIntentManager.registerIntentListener( Intent.ACTION_POWER_DISCONNECTED, this );
mIntentManager.registerIntentListener( MogoReceiver.ACTION_NWD_ACC, this );
}
private void registerAIReceiver( Context context ) {
@@ -262,7 +263,11 @@ public class MogoServiceProvider implements IMogoModuleProvider,
}
}
filter.addAction( MogoReceiver.VOICE_ACTION );
filter.addAction( MogoReceiver.ADAS_ACTION );
filter.addAction( MogoReceiver.ACTIION_ADAS );
filter.addAction( MogoReceiver.ACTION_NWD_ACC );
// acc On
filter.addAction( Intent.ACTION_POWER_CONNECTED );
filter.addAction( Intent.ACTION_POWER_DISCONNECTED );
try {
context.getApplicationContext().registerReceiver( mAIAssistReceiver, filter );
Logger.i( TAG, "register voice receiver." );
@@ -376,7 +381,6 @@ public class MogoServiceProvider implements IMogoModuleProvider,
@Override
public void onMapChanged( MogoLatLng latLng, float zoom, float tilt, float bearing ) {
if ( mIsCameraInited ) {
mLastCustomRefreshCenterLocation = latLng;
mIsCameraInited = false;
@@ -477,11 +481,6 @@ public class MogoServiceProvider implements IMogoModuleProvider,
@Override
public void onNaviInfoUpdate( MogoNaviInfo naviinfo ) {
// 发送当前限速到 adas
Intent intent = new Intent( "com.mogo.launcher.adas" );
intent.putExtra( "adas_speed_limit", naviinfo.getCurrentLimitSpeed() );
Logger.i( TAG, "send limit data to adas: limitspeed = %f", naviinfo.getCurrentLimitSpeed() );
mContext.sendBroadcast( intent );
}
@Override
@@ -525,18 +524,37 @@ public class MogoServiceProvider implements IMogoModuleProvider,
}
@Override
public void onUpdateTraffic( MogoTraffic traffic ) {
if ( traffic != null ) {
Logger.i( TAG, "speed = %d, desc = %s", traffic.getSpeedLimit(), traffic.getDesc() );
// 发送当前限速到 adas
Intent intent = new Intent( "com.mogo.launcher.adas" );
intent.putExtra( "adas_speed_limit", traffic.getSpeedLimit() );
mContext.sendBroadcast( intent );
}
}
public IMogoMarkerClickListener getMarkerClickListener() {
return null;
}
@Override
public void onIntentReceived( String command, Intent intent ) {
if ( MogoReceiver.ADAS_ACTION.equals( command ) ) {
if ( MogoReceiver.ACTIION_ADAS.equals( command ) ) {
if ( intent == null ) {
return;
}
int status = intent.getIntExtra( MogoReceiver.PARAM_ADAS_STATUS, 0 );
mStatusManager.setADASUIShow( getModuleName(), status == 1 );
} else if ( Intent.ACTION_POWER_CONNECTED.equals( command ) ) {
mStatusManager.setAccStatus( getModuleName(), true );
} else if ( Intent.ACTION_POWER_DISCONNECTED.equals( command ) ) {
mStatusManager.setAccStatus( getModuleName(), false );
} else if ( MogoReceiver.ACTION_NWD_ACC.equals( command ) ) {
int state = intent.getByteExtra( MogoReceiver.PARAM_ACC_STATUS, ( byte ) 0 );
mStatusManager.setAccStatus( getModuleName(), state == 1 );
}
}

View File

@@ -30,10 +30,16 @@ public class MogoReceiver extends BroadcastReceiver {
/**
* ADAS
*/
public static final String ADAS_ACTION = "com.zhidao.autopilot.adas";
public static final String ACTIION_ADAS = "com.zhidao.autopilot.adas";
// ADAS 状态 0 - 关闭 1 - 打开
public static final String PARAM_ADAS_STATUS = "adas_drawer_status";
// 诺威达 acc 状态
public static final String ACTION_NWD_ACC = "com.nwd.action.ACTION_MCU_STATE_CHANGE";
// 诺威达 acc 状态
public static final String PARAM_ACC_STATUS = "extra_mcu_state";
private IMogoIntentManager mMogoIntentManager;
public MogoReceiver( Context context ) {

View File

@@ -25,7 +25,6 @@ import com.amap.api.services.geocoder.GeocodeSearch;
import com.amap.api.services.geocoder.RegeocodeResult;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;
import com.google.gson.JsonObject;
import com.mogo.commons.mvp.IView;
import com.mogo.commons.mvp.MvpFragment;
import com.mogo.commons.mvp.Presenter;
@@ -43,6 +42,7 @@ import com.mogo.map.marker.MogoMarkerOptions;
import com.mogo.map.model.MogoPoi;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.map.navi.MogoNaviInfo;
import com.mogo.map.navi.MogoTraffic;
import com.mogo.map.search.geo.MogoPoiItem;
import com.mogo.map.search.poisearch.IMogoPoiSearchListener;
import com.mogo.map.search.poisearch.MogoPoiResult;
@@ -349,6 +349,11 @@ public class TanluCardViewFragment extends MvpFragment<IView, Presenter<IView>>
public void onoCalculateFailed() {
}
@Override
public void onUpdateTraffic( MogoTraffic traffic ) {
}
});
//监听marker点击
@@ -799,7 +804,7 @@ public class TanluCardViewFragment extends MvpFragment<IView, Presenter<IView>>
getViewLifecycleOwner().getLifecycle().removeObserver(mPresenter);
TanluServiceHandler.getLocationClient().removeLocationListener(this);
mMogoRegisterCenter.unregisterMogoNaviListener(TanluConstants.MODEL_NAME);
mogoIntentManager.unregisterIntentListener(MogoReceiver.ADAS_ACTION);
mogoIntentManager.unregisterIntentListener(MogoReceiver.ACTIION_ADAS );
}
/**

View File

@@ -8,7 +8,7 @@ import com.alibaba.android.arouter.facade.template.IProvider;
* @author congtaowang
* @since 2020-01-09
* <p>
* 唤醒语音控制
* 唤醒语音控制
*/
public interface IMogoIntentManager extends IProvider {