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

This commit is contained in:
董宏宇
2020-03-09 14:23:33 +08:00
44 changed files with 1427 additions and 470 deletions

1
.idea/gradle.xml generated
View File

@@ -4,7 +4,6 @@
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="delegatedBuild" value="false" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">

View File

@@ -42,7 +42,6 @@ public class MogoApplication extends AbsMogoApplication {
crashSystem.init();
//设置debug模式日志不上传
crashSystem.setDebug(BuildConfig.DEBUG);
Logger.init( BuildConfig.DEBUG ? LogLevel.DEBUG : LogLevel.OFF );
//运营位卡片,需要默认显示,放在第一个加载

View File

@@ -72,7 +72,7 @@ public class Utils {
try {
Class< ? > c = Class.forName( PROPERTIES );
Method get = c.getMethod( GET, String.class );
value = ( String ) get.invoke( c, GSM_SERIAL );
value = ( String ) get.invoke( c, name );
} catch ( ClassNotFoundException var3 ) {
var3.printStackTrace();
} catch ( NoSuchMethodException var4 ) {

View File

@@ -100,11 +100,15 @@ public class SocketManager implements IMogoSocketManager, OnSocketReceiveCallbac
}
cacheLastReceivedMsgId( msgId );
}
Object object = null;
while ( iterator.hasNext() ) {
IMogoOnMessageListener listener = iterator.next();
if ( object == null ) {
object = GsonUtil.objectFromJson( payload.getPayload().toStringUtf8(), listener.target() );
}
if ( listener != null ) {
Logger.d( TAG, "received msg == %s, msgId = %s", payload.getPayload().toStringUtf8(), msgId );
listener.onMsgReceived( GsonUtil.objectFromJson( payload.getPayload().toStringUtf8(), listener.target() ) );
Logger.d( TAG, "received msgId = %s", msgId );
listener.onMsgReceived( object );
}
}
}

View File

@@ -48,7 +48,7 @@ MOGO_MODULE_BACK_VERSION=1.0.2-SNAPSHOT
## 工程外部模块
# 探路
MOGO_MODULE_TANLU_VERSION=1.0.0-SNAPSHOT
MOGO_MODULE_TANLU_VERSION=1.0.1-SNAPSHOT
# 车聊聊
CARCHATTING_VERSION=1.0.0-SNAPSHOT
# 车聊聊接口

View File

@@ -12,6 +12,7 @@ import android.view.View;
import android.view.animation.Interpolator;
import com.amap.api.maps.AMap;
import com.amap.api.maps.AMapUtils;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.CameraPosition;
@@ -33,10 +34,12 @@ import com.amap.api.navi.model.NaviInfo;
import com.mogo.map.IMogoMap;
import com.mogo.map.IMogoMapView;
import com.mogo.map.MogoLatLng;
import com.mogo.map.exception.MogoMapException;
import com.mogo.map.impl.amap.marker.AMapMarkerWrapper;
import com.mogo.map.impl.amap.message.AMapMessageListener;
import com.mogo.map.impl.amap.message.AMapMessageManager;
import com.mogo.map.impl.amap.navi.NaviClient;
import com.mogo.map.impl.amap.utils.MogoMapUtils;
import com.mogo.map.impl.amap.utils.ObjectUtils;
import com.mogo.map.listener.MogoMapListenerHandler;
import com.mogo.map.marker.IMogoMarker;
@@ -143,8 +146,6 @@ public class AMapNaviViewWrapper implements IMogoMapView,
mMapView.setRouteOverlayVisible( false );
mMapView.setCarOverlayVisible( false );
mMapView.setNaviMode( AMapNaviView.CAR_UP_MODE );
setRenderFps( 15 );
}
}
@@ -433,7 +434,7 @@ public class AMapNaviViewWrapper implements IMogoMapView,
Logger.e( TAG, "latlng = null or is illegal" );
return;
}
mockTouchEvent();
loseLockMode();
mMapView.getMap()
.moveCamera( CameraUpdateFactory.newLatLng( new LatLng( latLng.lat, latLng.lng ) ) );
}
@@ -473,6 +474,24 @@ public class AMapNaviViewWrapper implements IMogoMapView,
}
}
@Override
public void loseLockMode() {
mockTouchEvent();
}
/**
* 模拟点击事件,达到锁车->普通事件
*/
private void mockTouchEvent() {
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis() + 100;
int metaState = 0;
MotionEvent motionEvent = MotionEvent.obtain( downTime, eventTime, MotionEvent.ACTION_DOWN, 0, 0, metaState );
mMapView.dispatchTouchEvent( motionEvent );
MotionEvent upEvent = MotionEvent.obtain( downTime + 100, eventTime + 100, MotionEvent.ACTION_UP, 0, 0, metaState );
mMapView.dispatchTouchEvent( upEvent );
}
@Override
public void setLockZoom( int var1 ) {
if ( checkAMapView() ) {
@@ -630,19 +649,6 @@ public class AMapNaviViewWrapper implements IMogoMapView,
}
}
/**
* 模拟点击事件,达到锁车->普通事件
*/
private void mockTouchEvent() {
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis() + 100;
int metaState = 0;
MotionEvent motionEvent = MotionEvent.obtain( downTime, eventTime, MotionEvent.ACTION_DOWN, 0, 0, metaState );
mMapView.dispatchTouchEvent( motionEvent );
MotionEvent upEvent = MotionEvent.obtain( downTime + 100, eventTime + 100, MotionEvent.ACTION_UP, 0, 0, metaState );
mMapView.dispatchTouchEvent( upEvent );
}
@Override
public void setRenderFps( int fps ) {
if ( checkAMapView() ) {
@@ -654,24 +660,18 @@ public class AMapNaviViewWrapper implements IMogoMapView,
}
@Override
public void showBounds( List< MogoLatLng > lonLats, Rect bound ) {
if ( checkAMapView() ) {
if ( lonLats == null ) {
return;
}
try {
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for ( MogoLatLng lonLat : lonLats ) {
builder.include( ObjectUtils.fromMogo2( lonLat ) );
}
if ( bound == null ) {
bound = new Rect();
}
LatLngBounds latLngBounds = builder.build();
mMapView.getMap().moveCamera( CameraUpdateFactory.newLatLngBoundsRect( latLngBounds, bound.left, bound.right, bound.top, bound.bottom ) );
} catch ( Exception e ) {
Logger.e( TAG, e, "error." );
public void showBounds( String tag, MogoLatLng carPosition, List< MogoLatLng > lonLats, Rect bound, boolean lockCarPosition ) {
if ( !checkAMapView() ) {
return;
}
try {
LatLngBounds latLngBounds = MogoMapUtils.getLatLngBounds( carPosition, lonLats, lockCarPosition );
if ( !lockCarPosition ) {
loseLockMode();
}
mMapView.getMap().moveCamera( CameraUpdateFactory.newLatLngBoundsRect( latLngBounds, bound.left, bound.right, bound.top, bound.bottom ) );
} catch ( Exception e ) {
Logger.e( TAG, e, "%s error.", tag );
}
}
@@ -681,4 +681,12 @@ public class AMapNaviViewWrapper implements IMogoMapView,
mMapView.getMap().runOnDrawFrame();
}
}
@Override
public float calculateLineDistance( MogoLatLng p1, MogoLatLng p2 ) throws Exception {
if ( p1 == null || p2 == null ) {
throw new Exception( "计算距离的点不能为 null" );
}
return AMapUtils.calculateLineDistance( ObjectUtils.fromMogo2( p1 ), ObjectUtils.fromMogo2( p2 ) );
}
}

View File

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

View File

@@ -109,7 +109,6 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter {
MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_NAVI );
traffic.setDistance( aMapNaviCameraInfo.getCameraDistance() );
traffic.setSpeedLimit( aMapNaviCameraInfo.getCameraSpeed() );
traffic.setDesc( "测速摄像" );
MogoNaviListenerHandler.getInstance().onUpdateTraffic( traffic );
}
@@ -147,7 +146,6 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter {
MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_NAVI );
traffic.setDistance( 0 );
traffic.setSpeedLimit( 0 );
traffic.setDesc( "测速摄像" );
MogoNaviListenerHandler.getInstance().onUpdateTraffic( traffic );
}
}

View File

@@ -98,6 +98,13 @@ public class AMapUIController implements IMogoMapUIController {
}
}
@Override
public void loseLockMode() {
if ( mClient != null ) {
mClient.loseLockMode();
}
}
@Override
public void setLockZoom(int var1) {
if (mClient != null) {
@@ -190,9 +197,9 @@ public class AMapUIController implements IMogoMapUIController {
}
@Override
public void showBounds(List<MogoLatLng> lonLats, Rect bound) {
if (mClient != null) {
mClient.showBounds(lonLats, bound);
public void showBounds( String tag, MogoLatLng carPosition, List< MogoLatLng > lonLats, Rect bound, boolean lockCarPosition ) {
if ( mClient != null ) {
mClient.showBounds( tag, carPosition, lonLats, bound, lockCarPosition );
}
}
@@ -202,4 +209,12 @@ public class AMapUIController implements IMogoMapUIController {
mClient.forceRender();
}
}
@Override
public float calculateLineDistance( MogoLatLng p1, MogoLatLng p2 ) throws Exception {
if ( mClient != null ) {
return mClient.calculateLineDistance( p1, p2 );
}
return 0;
}
}

View File

@@ -0,0 +1,79 @@
package com.mogo.map.impl.amap.utils;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.LatLngBounds;
import com.mogo.map.MogoLatLng;
import com.mogo.map.exception.MogoMapException;
import java.util.List;
/**
* @author congtaowang
* @since 2020-03-04
* <p>
* 地图工具类
*/
public class MogoMapUtils {
public static LatLngBounds getLatLngBounds( MogoLatLng carPosition, List< MogoLatLng > lonLats, boolean lockCarPosition ) throws Exception {
if ( lonLats == null || lonLats.isEmpty() ) {
throw new MogoMapException( "经纬度不能为null或空集合" );
}
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for ( MogoLatLng lonLat : lonLats ) {
builder.include( ObjectUtils.fromMogo2( lonLat ) );
}
if ( carPosition != null && !lockCarPosition ) {
builder.include( ObjectUtils.fromMogo2( carPosition ) );
}
LatLngBounds latLngBounds = builder.build();
if ( !lockCarPosition ) {
return latLngBounds;
}
if ( carPosition == null ) {
throw new MogoMapException( "自车位置经纬度信息不能为空" );
}
if ( latLngBounds.northeast == null && latLngBounds.southwest == null ) {
return null;
}
double south = 0.0;
double west = 0.0;
double east = 0.0;
double north = 0.0;
double dLat = 0.0;
double dLon = 0.0;
if ( latLngBounds.northeast == null ) {
dLat = Math.abs( carPosition.lat - latLngBounds.southwest.latitude );
dLon = Math.abs( carPosition.lng - latLngBounds.southwest.longitude );
} else if ( latLngBounds.southwest == null ) {
dLat = Math.abs( carPosition.lat - latLngBounds.northeast.latitude );
dLon = Math.abs( carPosition.lng - latLngBounds.northeast.longitude );
} else {
final double dLat1 = Math.abs( carPosition.lat - latLngBounds.southwest.latitude );
final double dLon1 = Math.abs( carPosition.lng - latLngBounds.southwest.longitude );
final double dLat2 = Math.abs( carPosition.lat - latLngBounds.northeast.latitude );
final double dLon2 = Math.abs( carPosition.lng - latLngBounds.northeast.longitude );
dLat = dLat1 > dLat2 ? dLat1 : dLat2;
dLon = dLon1 > dLon2 ? dLon1 : dLon2;
}
west = carPosition.lat - dLat;
south = carPosition.lng + dLon;
east = carPosition.lat + dLat;
north = carPosition.lng - dLon;
if ( south == 0.0 || west == 0.0 || east == 0.0 || north == 0.0 ) {
return null;
}
return new LatLngBounds.Builder().include( new LatLng( east, north ) ).include( new LatLng( west, south ) ).build();
}
}

View File

@@ -10,6 +10,9 @@ import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.Poi;
import com.amap.api.navi.model.AMapCongestionLink;
import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
import com.amap.api.navi.model.AimLessModeCongestionInfo;
import com.amap.api.navi.model.NaviInfo;
import com.amap.api.navi.model.NaviLatLng;
import com.amap.api.services.core.LatLonPoint;
@@ -38,7 +41,11 @@ import com.mogo.map.location.MogoLocation;
import com.mogo.map.marker.IMogoMarkerIconViewCreator;
import com.mogo.map.marker.MogoMarkerOptions;
import com.mogo.map.model.MogoPoi;
import com.mogo.map.navi.MogoCongestionInfo;
import com.mogo.map.navi.MogoCongestionLink;
import com.mogo.map.navi.MogoNaviInfo;
import com.mogo.map.navi.MogoNaviListenerHandler;
import com.mogo.map.navi.MogoTraffic;
import com.mogo.map.search.geo.MogoAoiItem;
import com.mogo.map.search.geo.MogoBusinessArea;
import com.mogo.map.search.geo.MogoCrossroad;
@@ -62,6 +69,7 @@ import com.mogo.map.search.poisearch.MogoSearchBound;
import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
@@ -639,4 +647,61 @@ public class ObjectUtils {
mogoNaviInfo.setCurrentSpeed( naviInfo.getLimitSpeed() );
return mogoNaviInfo;
}
public static MogoCongestionInfo fromAMap( AimLessModeCongestionInfo aimLessModeCongestionInfo ) {
if ( aimLessModeCongestionInfo == null ) {
return null;
}
MogoCongestionInfo congestionInfo = new MogoCongestionInfo();
congestionInfo.setCongestionStatus( aimLessModeCongestionInfo.getCongestionStatus() );
congestionInfo.setEventLat( aimLessModeCongestionInfo.getEventLat() );
congestionInfo.setEventLon( aimLessModeCongestionInfo.getEventLon() );
congestionInfo.setEventType( aimLessModeCongestionInfo.getEventType() );
congestionInfo.setCongestionLinks( new ArrayList< MogoCongestionLink >() );
congestionInfo.setLength( aimLessModeCongestionInfo.getLength() );
congestionInfo.setRoadName( aimLessModeCongestionInfo.getRoadName() );
congestionInfo.setTime( aimLessModeCongestionInfo.getTime() );
if ( aimLessModeCongestionInfo.getAmapCongestionLinks() != null
&& aimLessModeCongestionInfo.getAmapCongestionLinks().length != 0 ) {
for ( AMapCongestionLink amapCongestionLink : aimLessModeCongestionInfo.getAmapCongestionLinks() ) {
if ( amapCongestionLink == null ) {
continue;
}
MogoCongestionLink link = new MogoCongestionLink();
link.setCongestionStatus( amapCongestionLink.getCongestionStatus() );
if ( amapCongestionLink.getCoords() != null ) {
link.setCoords( new ArrayList< MogoLatLng >() );
Iterator< NaviLatLng > iterator = amapCongestionLink.getCoords().iterator();
while ( iterator.hasNext() ) {
NaviLatLng naviLatLng = iterator.next();
if ( naviLatLng == null ) {
continue;
}
link.getCoords().add( new MogoLatLng( naviLatLng.getLatitude(), naviLatLng.getLongitude() ) );
}
}
congestionInfo.getCongestionLinks().add( link );
}
}
return congestionInfo;
}
public static MogoTraffic fromAMap( AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos ) {
if ( aMapNaviTrafficFacilityInfos == null || aMapNaviTrafficFacilityInfos.length == 0 ) {
return null;
}
for ( AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo : aMapNaviTrafficFacilityInfos ) {
if ( aMapNaviTrafficFacilityInfo == null ) {
continue;
}
MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_AIM );
traffic.setDistance( aMapNaviTrafficFacilityInfo.getDistance() );
traffic.setSpeedLimit( aMapNaviTrafficFacilityInfo.getLimitSpeed() );
traffic.setTrafficType( aMapNaviTrafficFacilityInfo.getBroadcastType() );
traffic.setLat( aMapNaviTrafficFacilityInfo.latitude );
traffic.setLon( aMapNaviTrafficFacilityInfo.longitude );
return traffic;
}
return null;
}
}

View File

@@ -12,21 +12,42 @@ import android.os.Parcelable;
public class MogoLatLng implements Parcelable {
public final double lat;
@Deprecated
public final double lng;
public final double lon;
public MogoLatLng( double lat, double lng ) {
public MogoLatLng( double lat, double lon ) {
this.lat = lat;
this.lng = lng;
this.lng = lon;
this.lon = lng;
}
public double getLat() {
return lat;
}
/**
* Deprecated, use {@link #getLon()} instead.
*
* @return
*/
@Deprecated
public double getLng() {
return lng;
}
public double getLon() {
return lon;
}
@Override
public String toString() {
return "MogoLatLng{" +
"lat=" + lat +
", lon=" + lon +
'}';
}
@Override
public int describeContents() {
return 0;
@@ -36,14 +57,16 @@ public class MogoLatLng implements Parcelable {
public void writeToParcel( Parcel dest, int flags ) {
dest.writeDouble( this.lat );
dest.writeDouble( this.lng );
dest.writeDouble( this.lon );
}
protected MogoLatLng( Parcel in ) {
this.lat = in.readDouble();
this.lng = in.readDouble();
this.lon = in.readDouble();
}
public static final Parcelable.Creator< MogoLatLng > CREATOR = new Parcelable.Creator< MogoLatLng >() {
public static final Creator< MogoLatLng > CREATOR = new Creator< MogoLatLng >() {
@Override
public MogoLatLng createFromParcel( Parcel source ) {
return new MogoLatLng( source );
@@ -54,12 +77,4 @@ public class MogoLatLng implements Parcelable {
return new MogoLatLng[size];
}
};
@Override
public String toString() {
return "MogoLatLng{" +
"lat=" + lat +
", lng=" + lng +
'}';
}
}

View File

@@ -2,6 +2,7 @@ package com.mogo.map.listener;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.marker.MogoMarkersHandler;
import com.mogo.map.navi.IMogoAimlessModeListener;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.map.navi.MogoNaviListenerHandler;
@@ -63,4 +64,14 @@ public class MogoHosListenerRegister implements IMogoHosListenerRegister {
public void unregisterMarkerClickListener() {
MogoMarkersHandler.getInstance().unregisterMarkerClickListener();
}
@Override
public void registerHostAimlessModeListener( IMogoAimlessModeListener listener ) {
MogoNaviListenerHandler.getInstance().registerHostAimlessModeListener( listener );
}
@Override
public void unregisterHostAimlessModeListener() {
MogoNaviListenerHandler.getInstance().unregisterHostAimlessModeListener();
}
}

View File

@@ -0,0 +1,22 @@
package com.mogo.map.navi;
/**
* @author congtaowang
* @since 2020-03-09
* <p>
* 续航模式回调
*/
public interface IMogoAimlessModeListener {
/**
* 巡航信息发生改变
*/
void onUpdateTraffic2( MogoTraffic traffic );
/**
* 拥堵信息
*
* @param info
*/
void onUpdateCongestion( MogoCongestionInfo info );
}

View File

@@ -47,6 +47,8 @@ public interface IMogoNaviListener {
/**
* 巡航信息发生改变
* Deprecated, use {@link IMogoAimlessModeListener#onUpdateTraffic2(MogoTraffic)} instead.
*/
void onUpdateTraffic(MogoTraffic traffic);
@Deprecated
void onUpdateTraffic( MogoTraffic traffic );
}

View File

@@ -15,8 +15,20 @@ public interface IMogoNaviListenerRegister {
*/
void registerHostNaviListener( IMogoNaviListener listener );
/**
* 注册巡航模式回调,各业务模块不用关注
*
* @param listener
*/
void registerHostAimlessModeListener( IMogoAimlessModeListener listener );
/**
* 注销导航回调,各业务模块不用关注
*/
void unregisterHostNaviListener();
/**
* 注销巡航回调,各业务模块不用关注
*/
void unregisterHostAimlessModeListener();
}

View File

@@ -0,0 +1,133 @@
package com.mogo.map.navi;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.List;
/**
* @author congtaowang
* @since 2020-03-09
* <p>
* 拥堵详情
*/
public class MogoCongestionInfo implements Parcelable {
private int mTime;
private int mLength;
private String mRoadName;
private int mCongestionStatus;
private int mEventType;
private double mEventLon;
private double mEventLat;
private List< MogoCongestionLink > mCongestionLinks;
public MogoCongestionInfo() {
}
public int getTime() {
return mTime;
}
public void setTime( int mTime ) {
this.mTime = mTime;
}
public int getLength() {
return mLength;
}
public void setLength( int mLength ) {
this.mLength = mLength;
}
public String getRoadName() {
return mRoadName;
}
public void setRoadName( String mRoadName ) {
this.mRoadName = mRoadName;
}
public int getCongestionStatus() {
return mCongestionStatus;
}
public void setCongestionStatus( int mCongestionStatus ) {
this.mCongestionStatus = mCongestionStatus;
}
public int getEventType() {
return mEventType;
}
public void setEventType( int mEventType ) {
this.mEventType = mEventType;
}
public double getEventLon() {
return mEventLon;
}
public void setEventLon( double mEventLon ) {
this.mEventLon = mEventLon;
}
public double getEventLat() {
return mEventLat;
}
public void setEventLat( double mEventLat ) {
this.mEventLat = mEventLat;
}
public List< MogoCongestionLink > getCongestionLinks() {
return mCongestionLinks;
}
public void setCongestionLinks( List< MogoCongestionLink > mCongestionLinks ) {
this.mCongestionLinks = mCongestionLinks;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel( Parcel dest, int flags ) {
dest.writeInt( this.mTime );
dest.writeInt( this.mLength );
dest.writeString( this.mRoadName );
dest.writeInt( this.mCongestionStatus );
dest.writeInt( this.mEventType );
dest.writeDouble( this.mEventLon );
dest.writeDouble( this.mEventLat );
dest.writeTypedList( this.mCongestionLinks );
}
protected MogoCongestionInfo( Parcel in ) {
this.mTime = in.readInt();
this.mLength = in.readInt();
this.mRoadName = in.readString();
this.mCongestionStatus = in.readInt();
this.mEventType = in.readInt();
this.mEventLon = in.readDouble();
this.mEventLat = in.readDouble();
this.mCongestionLinks = in.createTypedArrayList( MogoCongestionLink.CREATOR );
}
public static final Creator< MogoCongestionInfo > CREATOR = new Creator< MogoCongestionInfo >() {
@Override
public MogoCongestionInfo createFromParcel( Parcel source ) {
return new MogoCongestionInfo( source );
}
@Override
public MogoCongestionInfo[] newArray( int size ) {
return new MogoCongestionInfo[size];
}
};
}

View File

@@ -0,0 +1,69 @@
package com.mogo.map.navi;
import android.os.Parcel;
import android.os.Parcelable;
import com.mogo.map.MogoLatLng;
import java.util.ArrayList;
import java.util.List;
/**
* @author congtaowang
* @since 2020-03-09
* <p>
* 描述
*/
public class MogoCongestionLink implements Parcelable {
private ArrayList< MogoLatLng > mCoords;
private int mCongestionStatus;
public MogoCongestionLink() {
}
public List< MogoLatLng > getCoords() {
return mCoords;
}
public void setCoords( ArrayList< MogoLatLng > mCoords ) {
this.mCoords = mCoords;
}
public int getCongestionStatus() {
return mCongestionStatus;
}
public void setCongestionStatus( int mCongestionStatus ) {
this.mCongestionStatus = mCongestionStatus;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel( Parcel dest, int flags ) {
dest.writeTypedList( this.mCoords );
dest.writeInt( this.mCongestionStatus );
}
protected MogoCongestionLink( Parcel in ) {
this.mCoords = in.createTypedArrayList( MogoLatLng.CREATOR );
this.mCongestionStatus = in.readInt();
}
public static final Creator< MogoCongestionLink > CREATOR = new Creator< MogoCongestionLink >() {
@Override
public MogoCongestionLink createFromParcel( Parcel source ) {
return new MogoCongestionLink( source );
}
@Override
public MogoCongestionLink[] newArray( int size ) {
return new MogoCongestionLink[size];
}
};
}

View File

@@ -6,7 +6,7 @@ package com.mogo.map.navi;
* <p>
* 地图监听注册管理
*/
public class MogoNaviListenerHandler implements IMogoNaviListener, IMogoNaviListenerRegister {
public class MogoNaviListenerHandler implements IMogoNaviListener, IMogoNaviListenerRegister, IMogoAimlessModeListener {
private static volatile MogoNaviListenerHandler sInstance;
@@ -33,6 +33,11 @@ public class MogoNaviListenerHandler implements IMogoNaviListener, IMogoNaviList
*/
private IMogoNaviListener mDelegateListener = null;
/**
* 上层模块代理对象
*/
private IMogoAimlessModeListener mAimlessDelegateListener = null;
@Override
public void registerHostNaviListener( IMogoNaviListener listener ) {
mDelegateListener = listener;
@@ -43,6 +48,16 @@ public class MogoNaviListenerHandler implements IMogoNaviListener, IMogoNaviList
mDelegateListener = null;
}
@Override
public void registerHostAimlessModeListener( IMogoAimlessModeListener listener ) {
mAimlessDelegateListener = listener;
}
@Override
public void unregisterHostAimlessModeListener() {
mAimlessDelegateListener = null;
}
@Override
public synchronized void onInitNaviFailure() {
if ( mDelegateListener != null ) {
@@ -93,9 +108,24 @@ public class MogoNaviListenerHandler implements IMogoNaviListener, IMogoNaviList
}
@Override
@Deprecated
public void onUpdateTraffic( MogoTraffic traffic ) {
if ( mDelegateListener != null ) {
mDelegateListener.onUpdateTraffic( traffic );
}
}
@Override
public void onUpdateTraffic2( MogoTraffic traffic ) {
if ( mAimlessDelegateListener != null ) {
mAimlessDelegateListener.onUpdateTraffic2( traffic );
}
}
@Override
public void onUpdateCongestion( MogoCongestionInfo info ) {
if ( mAimlessDelegateListener != null ) {
mAimlessDelegateListener.onUpdateCongestion( info );
}
}
}

View File

@@ -1,5 +1,7 @@
package com.mogo.map.navi;
import com.mogo.map.MogoLatLng;
/**
* @author congtaowang
* @since 2020-01-16
@@ -34,9 +36,65 @@ public class MogoTraffic {
private int mSpeedLimit;
/**
* 描述
* 经度
*/
private String mDesc;
private double mLon;
/**
* 维度
*/
private double mLat;
/**
* 交通类型
* 0 未知道路设施
* 4 测速摄像头、测速雷达
* 5 违章摄像头
* 10 请谨慎驾驶
* 11 有连续拍照
* 12 铁路道口
* 13 注意落石(左侧)
* 14 事故易发地段
* 15 易滑
* 16 村庄
* 18 前方学校
* 19 有人看管的铁路道口
* 20 无人看管的铁路道口
* 21 两侧变窄
* 22 向左急弯路
* 23 向右急弯路
* 24 反向弯路
* 25 连续弯路
* 26 左侧合流标识牌
* 27 右侧合流标识牌
* 28 监控摄像头
* 29 专用道摄像头
* 31 禁止超车
* 36 右侧变窄
* 37 左侧变窄
* 38 窄桥
* 39 左右绕行
* 40 左侧绕行
* 41 右侧绕行
* 42 注意落石(右侧)
* 43 傍山险路(左侧)
* 44 傍山险路(右侧)
* 47 上陡坡
* 48 下陡坡
* 49 过水路面
* 50 路面不平
* 52 慢行
* 53 注意危险
* 58 隧道
* 59 渡口
* 92 闯红灯
* 93 应急车道
* 94 非机动车道
* 100 不绑定电子眼高发地
* 101 车道违章
* 102 超速违章
*/
private int mTrafficType;
public MogoTraffic( int fromType ) {
mFromType = fromType;
@@ -67,10 +125,124 @@ public class MogoTraffic {
}
public String getDesc() {
return mDesc;
switch ( getTrafficType() ) {
case 0:
default:
return "未知道路设施";
case 4:
return "测速摄像头、测速雷达";
case 5:
return "违章摄像头";
case 10:
return "请谨慎驾驶";
case 11:
return "有连续拍照";
case 12:
return "铁路道口";
case 13:
return "注意落石(左侧)";
case 14:
return "事故易发地段";
case 15:
return "易滑";
case 16:
return "村庄";
case 18:
return "前方学校";
case 19:
return "有人看管的铁路道口";
case 20:
return "无人看管的铁路道口";
case 21:
return "两侧变窄";
case 22:
return "向左急弯路";
case 23:
return "向右急弯路";
case 24:
return "反向弯路";
case 25:
return "连续弯路";
case 26:
return "左侧合流标识牌";
case 27:
return "右侧合流标识牌";
case 28:
return "监控摄像头";
case 29:
return "专用道摄像头";
case 31:
return "禁止超车";
case 36:
return "右侧变窄";
case 37:
return "左侧变窄";
case 38:
return "窄桥";
case 39:
return "左右绕行";
case 40:
return "左侧绕行";
case 41:
return "右侧绕行";
case 42:
return "注意落石(右侧)";
case 43:
return "傍山险路(左侧)";
case 44:
return "傍山险路(右侧)";
case 47:
return "上陡坡";
case 48:
return "下陡坡";
case 49:
return "过水路面";
case 50:
return "路面不平";
case 52:
return "慢行";
case 53:
return "注意危险";
case 58:
return "隧道";
case 59:
return "渡口";
case 92:
return "闯红灯";
case 93:
return "应急车道";
case 94:
return "非机动车道";
case 100:
return "不绑定电子眼高发地";
case 101:
return "车道违章";
case 102:
return "超速违章";
}
}
public void setDesc( String desc ) {
this.mDesc = desc;
public double getLon() {
return mLon;
}
public void setLon( double lon ) {
this.mLon = lon;
}
public double getLat() {
return mLat;
}
public void setLat( double lat ) {
this.mLat = lat;
}
public int getTrafficType() {
return mTrafficType;
}
public void setTrafficType( int trafficType ) {
this.mTrafficType = trafficType;
}
}

View File

@@ -54,10 +54,15 @@ public interface IMogoMapUIController {
void showMyLocation(boolean visible);
/**
* 解锁锁车
* 锁车
*/
void recoverLockMode();
/**
* 解锁锁车
*/
void loseLockMode();
/**
* 设置锁车缩放级别
*
@@ -132,13 +137,24 @@ public interface IMogoMapUIController {
void setRenderFps(int fps);
/**
* @param lonLats 经纬度围成的范围
* @param bound 地图上可显示的范围
* @param tag 调用业务
* @param carPosition 当前位置
* @param lonLats 经纬度围成的范围
* @param bound 地图上可显示的范围
* @param lockCarPosition 是否锁定车辆位置
*/
void showBounds(List<MogoLatLng> lonLats, Rect bound);
void showBounds( String tag, MogoLatLng carPosition, List< MogoLatLng > lonLats, Rect bound, boolean lockCarPosition );
/**
* 强制刷新地图
*/
void forceRender();
/**
* 计算两点之间的距离
* @param p1
* @param p2
* @return
*/
float calculateLineDistance(MogoLatLng p1, MogoLatLng p2) throws Exception;
}

View File

@@ -92,6 +92,13 @@ public class MogoMapUIController implements IMogoMapUIController {
}
}
@Override
public void loseLockMode() {
if ( mDelegate != null ) {
mDelegate.loseLockMode();
}
}
@Override
public void setLockZoom(int var1) {
if (mDelegate != null) {
@@ -183,9 +190,9 @@ public class MogoMapUIController implements IMogoMapUIController {
}
@Override
public void showBounds( List< MogoLatLng > lonLats, Rect bound ) {
public void showBounds(String tag, MogoLatLng carPosition, List< MogoLatLng > lonLats, Rect bound, boolean lockCarPosition ) {
if ( mDelegate != null ) {
mDelegate.showBounds( lonLats, bound );
mDelegate.showBounds( tag, carPosition, lonLats, bound, lockCarPosition );
}
}
@@ -195,4 +202,12 @@ public class MogoMapUIController implements IMogoMapUIController {
mDelegate.forceRender();
}
}
@Override
public float calculateLineDistance( MogoLatLng p1, MogoLatLng p2 ) throws Exception {
if ( mDelegate != null ) {
return mDelegate.calculateLineDistance( p1, p2 );
}
return 0;
}
}

5
map-upload.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/bash
./gradlew :libraries:mogo-map-api:clean :libraries:mogo-map-api:uploadArchives
./gradlew :libraries:map-amap:clean :libraries:map-amap:uploadArchives
./gradlew :libraries:mogo-map:clean :libraries:mogo-map:uploadArchives

View File

@@ -34,7 +34,6 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi
private View mCarSettings;
private View mApps;
private AppsFragment mAppsFragment;
private IMogoFragmentManager mMogoFragmentManager;
/**

View File

@@ -7,6 +7,7 @@ import androidx.lifecycle.LifecycleOwner;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.commons.mvp.Presenter;
import com.mogo.module.apps.model.AppsModel;
import com.mogo.module.apps.utils.LaunchUtils;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.intent.IMogoIntentListener;
@@ -39,6 +40,8 @@ public class AppNavigatorPresenter extends Presenter< AppNavigatorView > impleme
super.onCreate( owner );
mIntentManager = ( IMogoIntentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_INTENT_MANAGER ).navigation( getContext() );
mMogoStatusManager = ( IMogoStatusManager ) ARouter.getInstance().build( MogoServicePaths.PATH_STATUS_MANAGER ).navigation( getContext() );
// 预加载应用列表,空间换时间
AppsModel.getInstance(getContext()).load( null );
}
@Override

View File

@@ -57,7 +57,7 @@ public class AppsAdapter extends BaseAdapter {
}
AppInfo appInfo = getItem( position );
if ( appInfo.getIconResId() <= 0 ) {
holder.mIcon.setImageDrawable( appInfo.getIcon() );
holder.mIcon.setImageResource( R.drawable.module_apps_ic_default_icon );
} else {
holder.mIcon.setImageResource( appInfo.getIconResId() );
}

View File

@@ -16,68 +16,70 @@ import com.mogo.module.apps.R;
public enum AppEnum {
//"QQ音乐",
QQMusic( "com.pvetec.musics", R.drawable.module_apps_ic_qq_music ),
QQMusic( "QQ音乐","com.pvetec.musics", R.drawable.module_apps_ic_qq_music ),
//"车聊聊",
Im( "com.zhidao.imdemo", R.drawable.module_apps_ic_im ),
Im( "车聊聊","com.zhidao.imdemo", R.drawable.module_apps_ic_im ),
//"探路",
RoadCondition( "com.zhidao.roadcondition", R.drawable.module_apps_ic_road_condition ),
RoadConditionSlit( "com.zhidao.roadcondition.split", R.drawable.module_apps_ic_road_condition ),
RoadCondition( "探路","com.zhidao.roadcondition", R.drawable.module_apps_ic_road_condition ),
RoadConditionSlit( "探路","com.zhidao.roadcondition.split", R.drawable.module_apps_ic_road_condition ),
//"福利",
Welfare( "com.zhidaohulian.welfare.car", R.drawable.module_apps_ic_welfare ),
Welfare( "福利","com.zhidaohulian.welfare.car", R.drawable.module_apps_ic_welfare ),
//"蘑菇小队",
Fleet( "com.zhidao.fleet", R.drawable.module_apps_ic_fleet ),
Fleet( "蘑菇小队","com.zhidao.fleet", R.drawable.module_apps_ic_fleet ),
//"行车记录仪",
CarCorder( "com.zhidao.carcorder", R.drawable.module_apps_ic_carcorder ),
CarCorder( "行车记录仪","com.zhidao.carcorder", R.drawable.module_apps_ic_carcorder ),
//"懒人听书",
Lrts( "com.zhidao.lrts", R.drawable.module_apps_ic_lrts ),
Lrts( "懒人听书","com.zhidao.lrts", R.drawable.module_apps_ic_lrts ),
//"一键清理",
CleanMaster( "com.zhidao.cleanmaster", R.drawable.module_apps_ic_clean_master ),
CleanMaster( "一键清理","com.zhidao.cleanmaster", R.drawable.module_apps_ic_clean_master ),
//"系统升级",
Fota( "com.abupdate.fota_demo_iot", R.drawable.module_apps_ic_fota ),
Fota( "系统升级","com.abupdate.fota_demo_iot", R.drawable.module_apps_ic_fota ),
//"微信车机助手",
WechatHelper( "com.zhidao.wechathelper", R.drawable.module_apps_ic_wechat ),
WechatHelper( "微信车机助手","com.zhidao.wechathelper", R.drawable.module_apps_ic_wechat ),
//"爱奇艺HD",
Qiyi( "com.qiyi.video.pad", R.drawable.module_apps_ic_qiyi ),
Qiyi( "爱奇艺HD","com.qiyi.video.pad", R.drawable.module_apps_ic_qiyi ),
//"喜马拉雅",
Ximalaya( "com.ximalaya.ting.android.car", R.drawable.module_apps_ic_ximalaya ),
Ximalaya( "喜马拉雅","com.ximalaya.ting.android.car", R.drawable.module_apps_ic_ximalaya ),
//"均衡器",
Equlizer( "com.zhidao.equalizer", R.drawable.module_apps_ic_equlizer ),
Equlizer( "均衡器","com.zhidao.equalizer", R.drawable.module_apps_ic_equlizer ),
//"方控学习",
SteerProduct( "com.zd.steerproduct", R.drawable.module_apps_ic_stee_product ),
SteerProduct( "方控学习","com.zd.steerproduct", R.drawable.module_apps_ic_stee_product ),
//"蓝牙音乐",
BTMusic( "com.nwd.bt.music", R.drawable.module_apps_ic_bt ),
BTMusic( "蓝牙音乐","com.nwd.bt.music", R.drawable.module_apps_ic_bt ),
//"车载设置",
CarSettings( "com.zhidao.settings", R.drawable.module_apps_ic_car_setting ),
CarSettings( "车载设置","com.zhidao.settings", R.drawable.module_apps_ic_car_setting ),
//"AUX",
AUX( "com.nwd.auxin", R.drawable.module_apps_ic_aux ),
AUX( "AUX","com.nwd.auxin", R.drawable.module_apps_ic_aux ),
//FM
FM( " com.nwd.radio", R.drawable.module_apps_ic_fm ),
FM( "FM","com.nwd.radio", R.drawable.module_apps_ic_fm ),
// 新鲜事
FreshThings( "com.zhidao.fresh.things", R.drawable.module_apps_ic_fresh_things ),
FreshThings( "新鲜事","com.zhidao.fresh.things", R.drawable.module_apps_ic_fresh_things ),
;
private String mName;
private String mPkg;
private int mIconResId;
AppEnum( String pkg, int iconResId ) {
AppEnum( String name, String pkg, int iconResId ) {
this.mName = name;
this.mPkg = pkg;
this.mIconResId = iconResId;
}
@@ -89,4 +91,8 @@ public enum AppEnum {
public int getIconResId() {
return mIconResId;
}
public String getName() {
return mName;
}
}

View File

@@ -31,4 +31,12 @@ public class AppEnumHelper {
}
return 0;
}
public static String getTargetName(String pkg){
AppEnum appEnum = sCustomizedApps.get( pkg );
if ( appEnum != null ) {
return appEnum.getName();
}
return pkg;
}
}

View File

@@ -74,12 +74,13 @@ public class AppsModel {
if ( !mPagedApps.containsKey( page ) ) {
mPagedApps.put( page, new ArrayList<>() );
}
String appName = packageInfo.applicationInfo.loadLabel( packageManager ).toString();
String appName = getApplicationName( packageManager, packageInfo );
String packageName = packageInfo.packageName;
String versionName = packageInfo.versionName;
int versionCode = packageInfo.versionCode;
Drawable appIcon = packageInfo.applicationInfo.loadIcon( packageManager );
AppInfo appInfo = new AppInfo( appName, packageName, versionName, versionCode, appIcon, AppEnumHelper.getCustomizedAppIconResId( packageName ) );
// 不加载默认图标,避免不必要的开销,因为现在应用列表图标都是定制的啊~~~~
// Drawable appIcon = packageInfo.applicationInfo.loadIcon( packageManager );
AppInfo appInfo = new AppInfo( appName, packageName, versionName, versionCode, null, AppEnumHelper.getCustomizedAppIconResId( packageName ) );
mPagedApps.get( page ).add( appInfo );
}
if ( callback != null ) {
@@ -102,7 +103,7 @@ public class AppsModel {
final PackageManager packageManager = mContext.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo( packageName, 0 );
if ( !mAppFilter.filter( packageInfo ) ) {
String appName = packageInfo.applicationInfo.loadLabel( packageManager ).toString();
String appName = getApplicationName( packageManager, packageInfo );
String versionName = packageInfo.versionName;
int versionCode = packageInfo.versionCode;
Drawable appIcon = packageInfo.applicationInfo.loadIcon( packageManager );
@@ -119,6 +120,14 @@ public class AppsModel {
}
}
private String getApplicationName( PackageManager packageManager, PackageInfo packageInfo ) {
String name = packageManager.getApplicationLabel( packageInfo.applicationInfo ).toString();
if ( name.startsWith( "com." ) || name.split( "." ).length > 3 ) {
return AppEnumHelper.getTargetName( packageInfo.packageName );
}
return name;
}
private int getPageIndex( String packageName, boolean add ) {
int totalPages = mPagedApps.size();
if ( add ) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -132,15 +132,14 @@ public class EntranceFragment extends MvpFragment<EntranceView, EntrancePresente
mMogoAddressManager.goCompany();
});
mUploadRoadCondition = findViewById(R.id.module_entrance_id_upload_road_condition);
mUploadRoadCondition.setOnClickListener(view -> {
ShareControl.getInstance(getActivity()).showDialog();
traceData("1");
});
mVRMode = findViewById(R.id.module_entrance_id_vr_mode);
mVRMode.setOnClickListener(view -> {
});
mUploadRoadCondition = findViewById( R.id.module_entrance_id_upload_road_condition );
mUploadRoadCondition.setOnClickListener( view -> {
ShareControl.getInstance( getActivity() ).showDialog();
traceData( "1" );
} );
mVRMode = findViewById( R.id.module_entrance_id_vr_mode );
mVRMode.setOnClickListener( view -> {
} );
mMove2CurrentLocation = findViewById(R.id.module_entrance_id_move2_current_location);
mMove2CurrentLocation.setOnClickListener(view -> {

View File

@@ -12,7 +12,6 @@ import androidx.annotation.Nullable;
import androidx.viewpager.widget.ViewPager;
import com.alibaba.android.arouter.launcher.ARouter;
import com.google.gson.JsonObject;
import com.mogo.commons.mvp.MvpActivity;
import com.mogo.commons.voice.AIAssist;
import com.mogo.map.location.IMogoLocationClient;
@@ -33,6 +32,7 @@ import com.mogo.module.main.cards.VerticalStackTransformer;
import com.mogo.module.main.constants.VoiceConstants;
import com.mogo.module.main.windowview.WindowViewHandler;
import com.mogo.module.service.ServiceConst;
import com.mogo.service.IMogoServiceApis;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.cardmanager.IMogoCardManager;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
@@ -42,22 +42,24 @@ import com.mogo.service.map.IMogoMapService;
import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.utils.logger.Logger;
import java.util.List;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.List;
/**
* @author congtaowang
* @since 2019-12-23
* <p>
* 描述:加载各个模块
*/
public class MainActivity extends MvpActivity<MainView, MainPresenter> implements MainView,
IMogoLocationListener,
IMogoMarkerClickListener, IMogoIntentListener {
public class MainActivity extends MvpActivity< MainView, MainPresenter > implements MainView,
IMogoLocationListener,
IMogoMarkerClickListener, IMogoIntentListener {
private static final String TAG = "MainActivity";
private IMogoServiceApis mServiceApis;
private IMogoMapService mMogoMapService;
private IMogoMapUIController mMogoMapUIController;
private MogoModulesHandler mMogoModuleHandler;
@@ -95,110 +97,110 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
@Override
protected void initViews() {
mCardsContainer = findViewById(R.id.module_main_id_cards_container);
mCardsContainer.setOrientation(OrientedViewPager.Orientation.VERTICAL);
mTransformer = new VerticalStackTransformer(this);
mCardsContainer = findViewById( R.id.module_main_id_cards_container );
mCardsContainer.setOrientation( OrientedViewPager.Orientation.VERTICAL );
mTransformer = new VerticalStackTransformer( this );
mCardsContainer.setOnPageChangeListener(
mOnPageChangeListener = new OnPageChangeListenerAdapter() {
private boolean mIsLast = true;
private boolean mCardFlipStatus = false;
mOnPageChangeListener = new OnPageChangeListenerAdapter() {
private boolean mIsLast = true;
private boolean mCardFlipStatus = false;
@Override
public void onPageSelected(int position) {
final long start = System.currentTimeMillis();
try {
IMogoModuleProvider provider =
mCardModulesAdapter.getProvider(mCurrentPosition);
mPresenter.postTrackLastCardShowEvent(provider);
mCurrentPosition = position;
provider = mCardModulesAdapter.getProvider(mCurrentPosition);
mMogoModuleHandler.setModuleEnable(provider.getModuleName());
mMogoCardManager.invoke(position,
mMogoModuleHandler.getCurrentModuleName());
} catch (Exception e) {
e.printStackTrace();
}
Logger.i(TAG,
"onPageSelected cost " + (System.currentTimeMillis() - start) + "ms");
}
@Override
public void onPageScrollStateChanged(int state) {
final long start = System.currentTimeMillis();
super.onPageScrollStateChanged(state);
if (state == ViewPager.SCROLL_STATE_DRAGGING) {
if (!mCardFlipStatus) {
mCardFlipStatus = true;
final IMogoModuleProvider provider =
mCardModulesAdapter.getProvider(mCurrentPosition);
mPresenter.postTrackCardFlipEvent(provider);
@Override
public void onPageSelected( int position ) {
final long start = System.currentTimeMillis();
try {
IMogoModuleProvider provider =
mCardModulesAdapter.getProvider( mCurrentPosition );
mPresenter.postTrackLastCardShowEvent( provider );
mCurrentPosition = position;
provider = mCardModulesAdapter.getProvider( mCurrentPosition );
mMogoModuleHandler.setModuleEnable( provider.getModuleName() );
mMogoCardManager.invoke( position,
mMogoModuleHandler.getCurrentModuleName() );
} catch ( Exception e ) {
e.printStackTrace();
}
} else if (state == ViewPager.SCROLL_STATE_IDLE) {
mCardFlipStatus = false;
mTransformer.resetOffsetScroll();
Logger.i( TAG,
"onPageSelected cost " + ( System.currentTimeMillis() - start ) + "ms" );
}
int cardSize = mCardModulesAdapter.getCount();
if (state == ViewPager.SCROLL_STATE_SETTLING) {
mIsLast = false;
} else if (state == ViewPager.SCROLL_STATE_IDLE && mIsLast) {
//此处为你需要的情况,再加入当前页码判断可知道是第一页还是最后一页
if (cardSize != 1 && mCurrentPosition == (cardSize - 1)) {
mCardsContainer.setCurrentItem(0, false);
} else if (cardSize != 1 && mCurrentPosition == 0) {
mCardsContainer.setCurrentItem(cardSize - 1, false);
@Override
public void onPageScrollStateChanged( int state ) {
final long start = System.currentTimeMillis();
super.onPageScrollStateChanged( state );
if ( state == ViewPager.SCROLL_STATE_DRAGGING ) {
if ( !mCardFlipStatus ) {
mCardFlipStatus = true;
final IMogoModuleProvider provider =
mCardModulesAdapter.getProvider( mCurrentPosition );
mPresenter.postTrackCardFlipEvent( provider );
}
} else if ( state == ViewPager.SCROLL_STATE_IDLE ) {
mCardFlipStatus = false;
mTransformer.resetOffsetScroll();
}
} else {
mIsLast = true;
int cardSize = mCardModulesAdapter.getCount();
if ( state == ViewPager.SCROLL_STATE_SETTLING ) {
mIsLast = false;
} else if ( state == ViewPager.SCROLL_STATE_IDLE && mIsLast ) {
//此处为你需要的情况,再加入当前页码判断可知道是第一页还是最后一页
if ( cardSize != 1 && mCurrentPosition == ( cardSize - 1 ) ) {
mCardsContainer.setCurrentItem( 0, false );
} else if ( cardSize != 1 && mCurrentPosition == 0 ) {
mCardsContainer.setCurrentItem( cardSize - 1, false );
}
} else {
mIsLast = true;
}
Logger.i( TAG, "onPageScrollStateChanged cost "
+ ( System.currentTimeMillis() - start )
+ "ms" );
}
Logger.i(TAG, "onPageScrollStateChanged cost "
+ (System.currentTimeMillis() - start)
+ "ms");
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
Logger.d(TAG, "pageScrolled : offset --- " + positionOffset);
mTransformer.offsetScrollChanged(positionOffset);
}
});
@Override
public void onPageScrolled( int position, float positionOffset,
int positionOffsetPixels ) {
super.onPageScrolled( position, positionOffset, positionOffsetPixels );
Logger.d( TAG, "pageScrolled : offset --- " + positionOffset );
mTransformer.offsetScrollChanged( positionOffset );
}
} );
mHeader = findViewById(R.id.module_main_id_header_fragment_container);
mCards = findViewById(R.id.module_main_id_cards_container);
mApps = findViewById(R.id.module_main_id_apps_fragment_container);
mEntrance = findViewById(R.id.module_main_id_entrance_fragment_container);
mFloatingLayout = findViewById(R.id.module_main_id_floating_view);
mLeftShadowFrame = findViewById(R.id.module_main_id_map_left_shadow_frame);
mTopShadowFrame = findViewById(R.id.module_main_id_map_top_shadow_frame);
mCoverUpLayout = findViewById(R.id.module_main_id_cover_up);
mCardCoverUpBottomLayout = findViewById(R.id.module_main_id_card_cover_up_bottom);
mHeader = findViewById( R.id.module_main_id_header_fragment_container );
mCards = findViewById( R.id.module_main_id_cards_container );
mApps = findViewById( R.id.module_main_id_apps_fragment_container );
mEntrance = findViewById( R.id.module_main_id_entrance_fragment_container );
mFloatingLayout = findViewById( R.id.module_main_id_floating_view );
mLeftShadowFrame = findViewById( R.id.module_main_id_map_left_shadow_frame );
mTopShadowFrame = findViewById( R.id.module_main_id_map_top_shadow_frame );
mCoverUpLayout = findViewById( R.id.module_main_id_cover_up );
mCardCoverUpBottomLayout = findViewById( R.id.module_main_id_card_cover_up_bottom );
WindowViewHandler.init(mFloatingLayout);
WindowViewHandler.init( mFloatingLayout );
}
// 隐藏布局
private void hideLayout() {
mHeader.setVisibility(View.GONE);
mCards.setVisibility(View.GONE);
mApps.setVisibility(View.GONE);
mEntrance.setVisibility(View.GONE);
mFloatingLayout.setVisibility(View.GONE);
mLeftShadowFrame.setVisibility(View.GONE);
mCardCoverUpBottomLayout.setVisibility(View.GONE);
mHeader.setVisibility( View.GONE );
mCards.setVisibility( View.GONE );
mApps.setVisibility( View.GONE );
mEntrance.setVisibility( View.GONE );
mFloatingLayout.setVisibility( View.GONE );
mLeftShadowFrame.setVisibility( View.GONE );
mCardCoverUpBottomLayout.setVisibility( View.GONE );
}
// 显示布局
private void showLayout() {
mHeader.setVisibility(View.VISIBLE);
mCards.setVisibility(View.VISIBLE);
mApps.setVisibility(View.VISIBLE);
mEntrance.setVisibility(View.VISIBLE);
mFloatingLayout.setVisibility(View.VISIBLE);
mLeftShadowFrame.setVisibility(View.VISIBLE);
mCardCoverUpBottomLayout.setVisibility(View.VISIBLE);
mHeader.setVisibility( View.VISIBLE );
mCards.setVisibility( View.VISIBLE );
mApps.setVisibility( View.VISIBLE );
mEntrance.setVisibility( View.VISIBLE );
mFloatingLayout.setVisibility( View.VISIBLE );
mLeftShadowFrame.setVisibility( View.VISIBLE );
mCardCoverUpBottomLayout.setVisibility( View.VISIBLE );
}
@Override
@@ -211,158 +213,157 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
public void loadModules() {
final long start = System.currentTimeMillis();
getWindow().setBackgroundDrawable( null );
mServiceApis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation();
MogoModulePaths.addModule( new MogoModule( ServiceConst.PATH_REFRESH_STRATEGY, ServiceConst.PATH_REFRESH_STRATEGY ) );
mMogoModuleHandler = new MogoModulesManager( this );
mMogoMapService = ( IMogoMapService ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICES_MAP ).navigation();
mMogoMapService = mServiceApis.getMapServiceApi();
if ( mMogoMapService != null ) {
mMogoMapService.getHostListenerRegister().registerHostMapListener( mMogoModuleHandler );
mMogoMapService.getHostListenerRegister().registerHostNaviListener( mMogoModuleHandler );
mMogoMapService.getHostListenerRegister().registerHostAimlessModeListener( mMogoModuleHandler );
mMogoMapService.getHostListenerRegister().registerMarkerClickListener( this );
}
mMogoModuleHandler.setMapLoadedCallback(() -> {
Logger.d(TAG, "map loaded." + Thread.currentThread().getName());
mMogoModuleHandler.setMapLoadedCallback( () -> {
Logger.d( TAG, "map loaded." + Thread.currentThread().getName() );
// 加载地图,触发地图加载完毕回调,在初始化其他卡片模块,保证卡片模块可以正确获取地图相关服务。
loadContainerModules();
mMogoModuleHandler.loadModules();
mPresenter.delayOperations();
// 显示左边遮罩
mLeftShadowFrame.setVisibility(View.VISIBLE);
mTopShadowFrame.setVisibility(View.VISIBLE);
mLeftShadowFrame.setVisibility( View.VISIBLE );
mTopShadowFrame.setVisibility( View.VISIBLE );
// 右移地图中心点
mMogoMapUIController = mMogoMapService.getMapUIController();
mMogoMapUIController.setPointToCenter(0.66145, 0.590688);
mMogoMapUIController.setPointToCenter( 0.66145, 0.590688 );
// 开启定位
startLocation();
});
mMogoModuleHandler.loadMapModule(R.id.module_main_id_map_fragment_container);
} );
mMogoModuleHandler.loadMapModule( R.id.module_main_id_map_fragment_container );
mMogoCardManager = (IMogoCardManager) ARouter.getInstance()
.build(MogoServicePaths.PATH_CARD_MANAGER)
.navigation(this);
mMogoCardManager = mServiceApis.getCardManagerApi();
mMogoFragmentManager = (IMogoFragmentManager) ARouter.getInstance()
.build(MogoServicePaths.PATH_FRAGMENT_MANAGER)
.navigation(this);
mMogoFragmentManager.init(this, R.id.module_main_id_search_fragment);
mMogoFragmentManager.registerMainFragmentStackTransactionListener((size) -> {
if (size == 0) {
mMogoFragmentManager = mServiceApis.getFragmentManagerApi();
mMogoFragmentManager.init( this, R.id.module_main_id_search_fragment );
mMogoFragmentManager.registerMainFragmentStackTransactionListener( ( size ) -> {
if ( size == 0 ) {
showLayout();
} else if (size == 1) {
} else if ( size == 1 ) {
hideLayout();
}
});
} );
mMogoIntentManager = (IMogoIntentManager) ARouter.getInstance()
.build(MogoServicePaths.PATH_INTENT_MANAGER)
.navigation(getContext());
mMogoIntentManager = mServiceApis.getIntentManagerApi();
registerVoiceCmd();
Log.i("timer", "cost " + (System.currentTimeMillis() - start) + "ms");
Log.i( "timer", "cost " + ( System.currentTimeMillis() - start ) + "ms" );
}
private void registerVoiceCmd() {
for (String cmd : VoiceConstants.sCmds) {
mMogoIntentManager.registerIntentListener(cmd, this);
for ( String cmd : VoiceConstants.sCmds ) {
mMogoIntentManager.registerIntentListener( cmd, this );
}
}
private void startLocation() {
mLocationClient = mMogoMapService.getSingletonLocationClient(getApplicationContext());
mLocationClient.addLocationListener(this);
mLocationClient.start(2_000L);
mLocationClient = mMogoMapService.getSingletonLocationClient( getApplicationContext() );
mLocationClient.addLocationListener( this );
mLocationClient.start( 2_000L );
}
private void loadContainerModules() {
mMogoModuleHandler.loadAppsListModule(R.id.module_main_id_apps_fragment_container);
mMogoModuleHandler.loadExtensionsModule(R.id.module_main_id_header_fragment_container);
mMogoModuleHandler.loadEntrancesModule(R.id.module_main_id_entrance_fragment_container);
mMogoModuleHandler.loadAppsListModule( R.id.module_main_id_apps_fragment_container );
mMogoModuleHandler.loadExtensionsModule( R.id.module_main_id_header_fragment_container );
mMogoModuleHandler.loadEntrancesModule( R.id.module_main_id_entrance_fragment_container );
}
@Override
public void postPickFirstCardEvent() {
if (mOnPageChangeListener != null) {
if ( mOnPageChangeListener != null ) {
// 默认触发第一个卡片
mOnPageChangeListener.onPageSelected(0);
mOnPageChangeListener.onPageSelected( 0 );
}
}
@Override
public void hideCoverUpLayout() {
mCoverUpLayout.setVisibility(View.GONE);
mCoverUpLayout.setVisibility( View.GONE );
}
@Override
public void loadCardModules() {
List<IMogoModuleProvider> providers = mMogoModuleHandler.loadCardsModule();
mCardModulesAdapter = new CardModulesAdapter(this, providers);
mCardsContainer.setOffscreenPageLimit(providers.size());
mCardsContainer.setPageTransformer(true, mTransformer);
mCardsContainer.setAdapter(mCardModulesAdapter);
List< IMogoModuleProvider > providers = mMogoModuleHandler.loadCardsModule();
mCardModulesAdapter = new CardModulesAdapter( this, providers );
mCardsContainer.setOffscreenPageLimit( providers.size() );
mCardsContainer.setPageTransformer( true, mTransformer );
mCardsContainer.setAdapter( mCardModulesAdapter );
mCardCoverUpBottomLayout.setVisibility(View.VISIBLE);
mCardCoverUpBottomLayout.setVisibility( View.VISIBLE );
}
@NonNull
@Override
protected MainPresenter createPresenter() {
return new MainPresenter(this);
return new MainPresenter( this );
}
@Override
public void onLocationChanged(MogoLocation location) {
if (mMogoModuleHandler != null) {
mMogoModuleHandler.onLocationChanged(location);
public void onLocationChanged( MogoLocation location ) {
if ( mMogoModuleHandler != null ) {
mMogoModuleHandler.onLocationChanged( location );
}
}
@Override
public boolean onMarkerClicked(IMogoMarker marker) {
switch2Card(marker.getOwner());
if (mMogoModuleHandler != null) {
mMogoModuleHandler.onMarkerClicked(marker);
public boolean onMarkerClicked( IMogoMarker marker ) {
switch2Card( marker.getOwner() );
if ( mMogoModuleHandler != null ) {
mMogoModuleHandler.onMarkerClicked( marker );
}
return false;
}
@Override
public void switch2Card(String cardType) {
if (mCardModulesAdapter != null) {
public void switch2Card( String cardType ) {
if ( mCardModulesAdapter != null ) {
int position = mCardModulesAdapter.getProviderPosition(cardType);
if (position != -1) {
int lastFactPosition = mCardModulesAdapter.getFactPosition(mCurrentPosition);
mCardsContainer.setCurrentItem(mCurrentPosition + position - lastFactPosition,
Math.abs(lastFactPosition - position) == 1);
int position = mCardModulesAdapter.getProviderPosition( cardType );
if ( position != -1 ) {
int lastFactPosition = mCardModulesAdapter.getFactPosition( mCurrentPosition );
mCardsContainer.setCurrentItem( mCurrentPosition + position - lastFactPosition,
Math.abs( lastFactPosition - position ) == 1 );
} else {
Logger.e(TAG, "Can't find type of %s's position", cardType);
Logger.e( TAG, "Can't find type of %s's position", cardType );
}
}
}
@Override
protected void onResume() {
MapBroadCastHelper.getInstance(this).mapFrount();
MapBroadCastHelper.getInstance( this ).mapFrount();
super.onResume();
}
@Override
protected void onPause() {
MapBroadCastHelper.getInstance(this).mapBackground();
MapBroadCastHelper.getInstance( this ).mapBackground();
super.onPause();
}
@Override
public void onBackPressed() {
if (mMogoFragmentManager.getStackSize() == 0) {
if ( mMogoFragmentManager.getStackSize() == 0 ) {
return;
}
if (mMogoFragmentManager != null) {
if ( mMogoFragmentManager != null ) {
mMogoFragmentManager.pop();
}
}
@@ -370,12 +371,12 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
@Override
protected void onDestroy() {
super.onDestroy();
if (mLocationClient != null) {
mLocationClient.removeLocationListener(this);
if ( mLocationClient != null ) {
mLocationClient.removeLocationListener( this );
mLocationClient.destroy();
}
mLocationClient = null;
if (mMogoModuleHandler != null) {
if ( mMogoModuleHandler != null ) {
mMogoModuleHandler.destroy();
}
mMogoModuleHandler = null;
@@ -383,38 +384,39 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
mMogoMapUIController = null;
mMogoCardManager = null;
mMogoFragmentManager = null;
AIAssist.getInstance(this).release();
AIAssist.getInstance( this ).release();
}
@Override public void onIntentReceived(String intentStr, Intent intent) {
if (TextUtils.isEmpty(intentStr)) {
@Override
public void onIntentReceived( String intentStr, Intent intent ) {
if ( TextUtils.isEmpty( intentStr ) ) {
return;
}
int currentItem = mCardsContainer.getCurrentItem();
int cardSize = mCardModulesAdapter.getCount();
switch (intentStr) {
switch ( intentStr ) {
case VoiceConstants.COMMAND_ZHIDAO_SWITCHCARD:
String data = intent.getStringExtra("data");
String data = intent.getStringExtra( "data" );
try {
JSONObject jsonObject = new JSONObject(data);
JSONObject jsonObject = new JSONObject( data );
String card = jsonObject.getString("card");
String card = jsonObject.getString( "card" );
if (TextUtils.equals("多媒体",card)) {
mCardsContainer.setCurrentItem(1);
if ( TextUtils.equals( "多媒体", card ) ) {
mCardsContainer.setCurrentItem( 1 );
}else if (TextUtils.equals("探路",card)){
mCardsContainer.setCurrentItem(3);
} else if ( TextUtils.equals( "探路", card ) ) {
mCardsContainer.setCurrentItem( 3 );
}else if (TextUtils.equals("在线车辆",card)){
mCardsContainer.setCurrentItem(5);
} else if ( TextUtils.equals( "在线车辆", card ) ) {
mCardsContainer.setCurrentItem( 5 );
}
} catch (JSONException e) {
} catch ( JSONException e ) {
e.printStackTrace();
}
@@ -422,16 +424,16 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
case VoiceConstants.COMMAND_ZHIDAO_SWITCHCARD_NEXT:
currentItem++;
mCardsContainer.setCurrentItem(currentItem / cardSize);
mCardsContainer.setCurrentItem( currentItem / cardSize );
break;
case VoiceConstants.COMMAND_ZHIDAO_SWITCHCARD_PREVIOUS:
currentItem--;
if (currentItem < 0) {
if ( currentItem < 0 ) {
currentItem += cardSize;
}
mCardsContainer.setCurrentItem(currentItem / cardSize);
mCardsContainer.setCurrentItem( currentItem / cardSize );
break;
default:

View File

@@ -5,6 +5,7 @@ import com.mogo.map.location.IMogoLocationClient;
import com.mogo.map.location.IMogoLocationListener;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.navi.IMogoAimlessModeListener;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.service.module.IMogoModuleProvider;
@@ -22,7 +23,8 @@ import javax.security.auth.callback.Callback;
public interface MogoModulesHandler extends IMogoMapListener,
IMogoNaviListener,
IMogoLocationListener,
IMogoMarkerClickListener {
IMogoMarkerClickListener,
IMogoAimlessModeListener {
/**
* 地图加载完成回调

View File

@@ -16,7 +16,9 @@ import com.mogo.map.location.MogoLocation;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.model.MogoPoi;
import com.mogo.map.navi.IMogoAimlessModeListener;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.map.navi.MogoCongestionInfo;
import com.mogo.map.navi.MogoNaviInfo;
import com.mogo.map.navi.MogoTraffic;
import com.mogo.map.uicontroller.EnumMapUI;
@@ -530,20 +532,7 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onUpdateTraffic( MogoTraffic traffic ) {
Iterator< IMogoNaviListener > iterator = MogoRegisterCenterHandler.getInstance().getNaviListeners();
if ( iterator == null ) {
return;
}
while ( iterator.hasNext() ) {
IMogoNaviListener listener = iterator.next();
if ( listener != null ) {
try {
listener.onUpdateTraffic( traffic );
} catch ( Exception e ) {
Logger.e( TAG, e, "error." );
}
}
}
Logger.e( TAG, "error. call deprecated method, use onUpdateTraffic2 instead." );
}
@Override
@@ -601,7 +590,7 @@ public class MogoModulesManager implements MogoModulesHandler,
public void destroy() {
if ( mMogoIntentManager != null ) {
mMogoIntentManager.unregisterIntentListener( Intent.ACTION_POWER_CONNECTED, this );
mMogoIntentManager.unregisterIntentListener( Intent.ACTION_POWER_DISCONNECTED,this );
mMogoIntentManager.unregisterIntentListener( Intent.ACTION_POWER_DISCONNECTED, this );
mMogoIntentManager.unregisterIntentListener( MogoReceiver.ACTION_NWD_ACC, this );
}
mActivity = null;
@@ -626,6 +615,34 @@ public class MogoModulesManager implements MogoModulesHandler,
return false;
}
@Override
public void onUpdateTraffic2( MogoTraffic traffic ) {
Iterator< IMogoAimlessModeListener > iterator = MogoRegisterCenterHandler.getInstance().getAimlessModeListeners();
if ( iterator == null ) {
return;
}
while ( iterator.hasNext() ) {
IMogoAimlessModeListener listener = iterator.next();
if ( listener == null ) {
listener.onUpdateTraffic2( traffic );
}
}
}
@Override
public void onUpdateCongestion( MogoCongestionInfo info ) {
Iterator< IMogoAimlessModeListener > iterator = MogoRegisterCenterHandler.getInstance().getAimlessModeListeners();
if ( iterator == null ) {
return;
}
while ( iterator.hasNext() ) {
IMogoAimlessModeListener listener = iterator.next();
if ( listener == null ) {
listener.onUpdateCongestion( info );
}
}
}
@Override
public String getCurrentModuleName() {
return mEnableModuleName;

View File

@@ -6,6 +6,7 @@ import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.map.listener.IMogoMapListener;
import com.mogo.map.location.IMogoLocationListener;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.navi.IMogoAimlessModeListener;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.module.IMogoModuleLifecycle;
@@ -71,7 +72,16 @@ public class MogoRegisterCenter implements IMogoRegisterCenter {
}
@Override
public void init( Context context ) {
public void registerMogoAimlessModeListener( String tag, IMogoAimlessModeListener listener ) {
}
@Override
public void unregisterMogoAimlessModeListener( String tag ) {
}
@Override
public void init( Context context ) {
}
}

View File

@@ -5,6 +5,7 @@ import android.content.Context;
import com.mogo.map.listener.IMogoMapListener;
import com.mogo.map.location.IMogoLocationListener;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.navi.IMogoAimlessModeListener;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.service.module.IMogoModuleLifecycle;
import com.mogo.service.module.IMogoRegisterCenter;
@@ -22,13 +23,13 @@ import java.util.Map;
public class MogoRegisterCenterHandler implements IMogoRegisterCenter {
private static volatile MogoRegisterCenterHandler sInstance;
private Context mContext;
private Map< String, IMogoModuleLifecycle > mLifecycle = new HashMap<>();
private Map< String, IMogoMapListener > mMap = new HashMap<>();
private Map< String, IMogoNaviListener > mNavi = new HashMap<>();
private Map< String, IMogoLocationListener > mLocation = new HashMap<>();
private Map< String, IMogoMarkerClickListener > mMarker = new HashMap<>();
private Map< String, IMogoAimlessModeListener > mAimless = new HashMap<>();
private MogoRegisterCenterHandler() {
}
@@ -99,11 +100,18 @@ public class MogoRegisterCenterHandler implements IMogoRegisterCenter {
mMarker.remove( tag );
}
@Override
public void registerMogoAimlessModeListener( String tag, IMogoAimlessModeListener listener ) {
mAimless.put( tag, listener );
}
@Override
public void unregisterMogoAimlessModeListener( String tag ) {
mAimless.remove( tag );
}
@Override
public void init( Context context ) {
if ( mContext == null && context != null ) {
mContext = context.getApplicationContext();
}
}
public IMogoModuleLifecycle getLifecycleListener( String tag ) {
@@ -145,4 +153,8 @@ public class MogoRegisterCenterHandler implements IMogoRegisterCenter {
public Iterator< IMogoMarkerClickListener > getMarkerListeners() {
return mMarker.values().iterator();
}
public Iterator< IMogoAimlessModeListener > getAimlessModeListeners() {
return mAimless.values().iterator();
}
}

View File

@@ -21,7 +21,9 @@ import com.mogo.map.location.MogoLocation;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.marker.IMogoMarkerManager;
import com.mogo.map.model.MogoPoi;
import com.mogo.map.navi.IMogoAimlessModeListener;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.map.navi.MogoCongestionInfo;
import com.mogo.map.navi.MogoNaviInfo;
import com.mogo.map.navi.MogoTraffic;
import com.mogo.map.uicontroller.EnumMapUI;
@@ -60,7 +62,8 @@ public class MogoServices implements IMogoMapListener,
IMogoLocationListener,
IMogoNaviListener,
IMogoStatusChangedListener,
IMogoIntentListener {
IMogoIntentListener,
IMogoAimlessModeListener {
private MogoServices() {
// private constructor
@@ -601,8 +604,18 @@ public class MogoServices implements IMogoMapListener,
@Override
public void onUpdateTraffic( MogoTraffic traffic ) {
}
@Override
public void onUpdateTraffic2( MogoTraffic traffic ) {
if ( traffic != null ) {
if ( traffic.getSpeedLimit() <= 0 ) {
return;
}
Logger.i( TAG, "speed = %d, desc = %s", traffic.getSpeedLimit(), traffic.getDesc() );
// 发送当前限速到 adas
Intent intent = new Intent( "com.mogo.launcher.adas" );
@@ -611,8 +624,9 @@ public class MogoServices implements IMogoMapListener,
}
}
public IMogoMarkerClickListener getMarkerClickListener() {
return null;
@Override
public void onUpdateCongestion( MogoCongestionInfo info ) {
}
@Override

View File

@@ -8,7 +8,6 @@ import android.text.TextUtils;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.intent.IMogoIntentManager;
import com.mogo.service.voice.IMogoVoiceManager;
import com.mogo.utils.logger.Logger;
/**

View File

@@ -0,0 +1,133 @@
package com.mogo.service;
import android.content.Context;
import com.alibaba.android.arouter.facade.template.IProvider;
import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.cardmanager.IMogoCardManager;
import com.mogo.service.connection.IMogoSocketManager;
import com.mogo.service.datamanager.IMogoDataManager;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.imageloader.IMogoImageloader;
import com.mogo.service.intent.IMogoIntentManager;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.module.IMogoRegisterCenter;
import com.mogo.service.module.IMogoSearchManager;
import com.mogo.service.module.IMogoSettingManager;
import com.mogo.service.network.IMogoNetwork;
import com.mogo.service.statusmanager.IMogoMsgCenter;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.service.windowview.IMogoWindowManager;
/**
* @author congtaowang
* @since 2020-03-06
* <p>
* 描述
*/
public interface IMogoServiceApis extends IProvider {
/**
* 获取埋点接口实例
*
* @return
*/
IMogoAnalytics getAnalyticsApi();
/**
* 卡片控制
*
* @return
*/
IMogoCardManager getCardManagerApi();
/**
* 获取socket操作api
*
* @return
*/
IMogoSocketManager getSocketManagerApi( Context context );
/**
* 大而全的数据管理接口
*
* @return
*/
IMogoDataManager getDataManagerApi();
/**
* fragment 管理接口
*
* @return
*/
IMogoFragmentManager getFragmentManagerApi();
/**
* 图片加载
*
* @return
*/
IMogoImageloader getImageLoaderApi();
/**
* 广播、语音指令分发
*
* @return
*/
IMogoIntentManager getIntentManagerApi();
/**
* 地图方服务接口
*
* @return
*/
IMogoMapService getMapServiceApi();
/**
* 各业务回调接口注册接口
*
* @return
*/
IMogoRegisterCenter getRegisterCenterApi();
/**
* 搜搜页面操作设置
*
* @return
*/
IMogoSearchManager getSearchManagerApi();
/**
* 导航设置页面
*
* @return
*/
IMogoSettingManager getSettingManager();
/**
* 网络接口api
*
* @return
*/
IMogoNetwork getNetworkApi();
/**
* @return
*/
IMogoMsgCenter getMsgCenterApi();
/**
* 状态管理接口
*
* @return
*/
IMogoStatusManager getStatusManagerApi();
/**
* 桌面浮窗控制接口
*
* @return
*/
IMogoWindowManager getWindowManager();
}

View File

@@ -20,18 +20,21 @@ public class MogoServicePaths {
* 地图服务接口ARouter实例化路径
*/
@Keep
@Deprecated
public static final String PATH_SERVICES_MAP = "/mapservices/api";
/**
* 图片接口ARouter实例化路径
*/
@Keep
@Deprecated
public static final String PATH_UTILS_IMAGE_LOADER = "/imageloader/api";
/**
* 埋点接口ARouter实例化路径
*/
@Keep
@Deprecated
public static final String PATH_UTILS_ANALYTICS = "/utils/analytics";
@@ -39,36 +42,43 @@ public class MogoServicePaths {
* 网络服务接口路径
*/
@Keep
@Deprecated
public static final String PATH_SERVICES_NETWORK = "/networkservices/api";
/**
* netty 长链
*/
@Deprecated
public static final String PATH_SOCKET_MANAGER = "/socket/manager";
/**
* 状态管理接口
*/
@Deprecated
public static final String PATH_STATUS_MANAGER = "/statusmanager/api";
/**
* 消息中心
*/
@Deprecated
public static final String PATH_MSG_CENTER = "/msgcenter/api";
/**
* 消息中心
*/
@Deprecated
public static final String PATH_WINDOW_MANAGER = "/windowmanger/api";
/**
* 卡片控制
*/
@Deprecated
public static final String PATH_CARD_MANAGER = "/cardmanager/api";
/**
* 管理 fragment
*/
@Deprecated
public static final String PATH_FRAGMENT_MANAGER = "/fragmentmanager/api";
/**
@@ -76,43 +86,54 @@ public class MogoServicePaths {
*
* @deprecated use {@link #PATH_INTENT_MANAGER} instead.
*/
@Deprecated
public static final String PATH_VOICE_MANAGER = "/voicemanager/api";
/**
* 意图控制接口
*/
@Deprecated
public static final String PATH_INTENT_MANAGER = "/intentmanager/api";
/**
* 基础功能监听回调注册
*/
@Deprecated
public static final String PATH_REGISTER_CENTER = "/registercenter/api";
/**
* 基础家和公司管理
*/
@Deprecated
public static final String PATH_ADDRESS_MANAGER = "/addressmanager/api";
/**
* 导航搜索模块管理
*/
@Deprecated
public static final String PATH_SEARCH_MANAGER = "/searchmanager/api";
/**
* 基础设置参数管理
*/
@Deprecated
public static final String PATH_SETTING_MANAGER = "/settingmanager/api";
/**
* 搜索module管理中心
*/
@Deprecated
public static final String PATH_SERACH_CENTER = "/searchcenter/api";
/**
* 大而全数据管理中心
*/
@Deprecated
public static final String PATH_DATA_MANAGER = "/datamanager/api";
/**
* 接口集合
*/
public static final String PATH_SERVICE_APIS = "/mogoservice/apis";
}

View File

@@ -4,6 +4,7 @@ import com.alibaba.android.arouter.facade.template.IProvider;
import com.mogo.map.listener.IMogoMapListener;
import com.mogo.map.location.IMogoLocationListener;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.navi.IMogoAimlessModeListener;
import com.mogo.map.navi.IMogoNaviListener;
/**
@@ -93,4 +94,21 @@ public interface IMogoRegisterCenter extends IProvider {
*/
void unregisterMogoMarkerClickListener( String tag );
/**
* 注册巡航监听
*
* @param tag
* @param listener
* @return
*/
void registerMogoAimlessModeListener( String tag, IMogoAimlessModeListener listener );
/**
* 注销定位监听函数
*
* @param tag
*/
void unregisterMogoAimlessModeListener( String tag );
}

View File

@@ -0,0 +1,146 @@
package com.mogo.service.impl;
import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.facade.template.IProvider;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.connection.socket.SocketManager;
import com.mogo.service.IMogoServiceApis;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.cardmanager.IMogoCardManager;
import com.mogo.service.connection.IMogoSocketManager;
import com.mogo.service.datamanager.IMogoDataManager;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.imageloader.IMogoImageloader;
import com.mogo.service.impl.analytics.impl.MogoAnalyticsImpl;
import com.mogo.service.impl.imageloader.glide.GlideImageLoader;
import com.mogo.service.impl.intent.IntentManager;
import com.mogo.service.impl.singleton.SingletonsHolder;
import com.mogo.service.intent.IMogoIntentManager;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.module.IMogoRegisterCenter;
import com.mogo.service.module.IMogoSearchManager;
import com.mogo.service.module.IMogoSettingManager;
import com.mogo.service.network.IMogoNetwork;
import com.mogo.service.statusmanager.IMogoMsgCenter;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.service.windowview.IMogoWindowManager;
import com.mogo.utils.logger.Logger;
/**
* @author congtaowang
* @since 2020-03-06
* <p>
* 描述
*/
@Route( path = MogoServicePaths.PATH_SERVICE_APIS )
public class MogoServiceApis implements IMogoServiceApis {
private static final String TAG = "MogoServiceApis";
private static Object sLock = new Object();
@Override
public IMogoAnalytics getAnalyticsApi() {
return MogoAnalyticsImpl.getInstance();
}
@Override
public IMogoSocketManager getSocketManagerApi( Context context ) {
return SocketManager.getInstance( context );
}
@Override
public IMogoFragmentManager getFragmentManagerApi() {
return SingletonsHolder.get( IMogoFragmentManager.class );
}
@Override
public IMogoImageloader getImageLoaderApi() {
return GlideImageLoader.getInstance();
}
@Override
public IMogoIntentManager getIntentManagerApi() {
return IntentManager.getInstance();
}
@Override
public IMogoMapService getMapServiceApi() {
return SingletonsHolder.get( IMogoMapService.class );
}
@Override
public IMogoNetwork getNetworkApi() {
return SingletonsHolder.get( IMogoNetwork.class );
}
@Override
public IMogoMsgCenter getMsgCenterApi() {
return SingletonsHolder.get( IMogoMsgCenter.class );
}
@Override
public IMogoStatusManager getStatusManagerApi() {
return SingletonsHolder.get( IMogoStatusManager.class );
}
@Override
public void init( Context context ) {
}
@Override
public synchronized IMogoCardManager getCardManagerApi() {
return getApiInstance( IMogoCardManager.class, MogoServicePaths.PATH_CARD_MANAGER );
}
@Override
public IMogoDataManager getDataManagerApi() {
return getApiInstance( IMogoDataManager.class, MogoServicePaths.PATH_DATA_MANAGER );
}
@Override
public IMogoRegisterCenter getRegisterCenterApi() {
return getApiInstance( IMogoRegisterCenter.class, MogoServicePaths.PATH_REGISTER_CENTER );
}
@Override
public IMogoSearchManager getSearchManagerApi() {
return getApiInstance( IMogoSearchManager.class, MogoServicePaths.PATH_SEARCH_MANAGER );
}
@Override
public IMogoSettingManager getSettingManager() {
return getApiInstance( IMogoSettingManager.class, MogoServicePaths.PATH_SETTING_MANAGER );
}
@Override
public IMogoWindowManager getWindowManager() {
return getApiInstance( IMogoWindowManager.class, MogoServicePaths.PATH_WINDOW_MANAGER );
}
private static < T extends IProvider > T getApiInstance( Class< T > clazz, String path ) {
T inst = SingletonsHolder.get( clazz );
if ( inst == null ) {
synchronized ( sLock ) {
inst = SingletonsHolder.get( clazz );
if ( inst != null ) {
return inst;
}
T newInst = ( T ) ARouter.getInstance().build( path ).navigation();
try {
SingletonsHolder.registerApi( clazz, newInst );
Logger.d( TAG, "keep IProvider instance to SingletonHolder: path = %s", path );
} catch ( Exception e ) {
Logger.e( TAG, e, "error." );
}
return newInst;
}
}
return inst;
}
}

View File

@@ -0,0 +1,46 @@
package com.mogo.service.impl.singleton;
import com.alibaba.android.arouter.facade.template.IProvider;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.impl.fragmentmanager.MogoFragmentManager;
import com.mogo.service.impl.map.MogoMapService;
import com.mogo.service.impl.network.MogoNetWorkService;
import com.mogo.service.impl.statusmanager.MogoMsgCenter;
import com.mogo.service.impl.statusmanager.MogoStatusManager;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.network.IMogoNetwork;
import com.mogo.service.statusmanager.IMogoMsgCenter;
import com.mogo.service.statusmanager.IMogoStatusManager;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author congtaowang
* @since 2020-03-06
* <p>
* 描述
*/
public class SingletonsHolder {
private static final Map< Class, Object > sSingletons = new ConcurrentHashMap<>();
static {
sSingletons.put( IMogoFragmentManager.class, new MogoFragmentManager() );
sSingletons.put( IMogoMapService.class, new MogoMapService() );
sSingletons.put( IMogoNetwork.class, new MogoNetWorkService() );
sSingletons.put( IMogoMsgCenter.class, new MogoMsgCenter() );
sSingletons.put( IMogoStatusManager.class, new MogoStatusManager() );
}
public static < T > T get( Class clazz ) {
return ( T ) sSingletons.get( clazz );
}
public static < T extends IProvider > void registerApi( Class< ? extends IProvider > api, T impl ) throws Exception {
if ( api == null || impl == null ) {
throw new Exception( "IProvider 接口类型和实例不能为 null" );
}
sSingletons.put( api, impl );
}
}