From 8d1297540caff3d65e477da1d4d66983adf05ac5 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Wed, 4 Mar 2020 16:58:26 +0800 Subject: [PATCH 1/3] opt showBounds method; add loseLockMode method --- .../map/impl/amap/AMapNaviViewWrapper.java | 62 +++++++-------- .../amap/uicontroller/AMapUIController.java | 11 ++- .../map/impl/amap/utils/MogoMapUtils.java | 79 +++++++++++++++++++ .../uicontroller/IMogoMapUIController.java | 16 +++- .../com/mogo/map/MogoMapUIController.java | 11 ++- 5 files changed, 140 insertions(+), 39 deletions(-) create mode 100644 libraries/map-amap/src/main/java/com/mogo/map/impl/amap/utils/MogoMapUtils.java diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java index edb635f11a..41847b9f10 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java @@ -37,6 +37,7 @@ 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; @@ -431,7 +432,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 ) ) ); } @@ -471,6 +472,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() ) { @@ -628,19 +647,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() ) { @@ -652,24 +658,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 ); } } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java index 5d653eefbc..cd0790f4af 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java @@ -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 ) { @@ -189,9 +196,9 @@ public class AMapUIController 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 ( mClient != null ) { - mClient.showBounds( lonLats, bound ); + mClient.showBounds( tag, carPosition, lonLats, bound, lockCarPosition ); } } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/utils/MogoMapUtils.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/utils/MogoMapUtils.java new file mode 100644 index 0000000000..d4da664812 --- /dev/null +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/utils/MogoMapUtils.java @@ -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 + *

+ * 地图工具类 + */ +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(); + } +} diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java index b424b85395..a3546cc25f 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java @@ -58,10 +58,15 @@ public interface IMogoMapUIController { void showMyLocation( boolean visible ); /** - * 解锁锁车 + * 锁车 */ void recoverLockMode(); + /** + * 解锁锁车 + */ + void loseLockMode(); + /** * 设置锁车缩放级别 * @@ -151,10 +156,13 @@ 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 ); /** * 强制刷新地图 diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java index eba856a3f6..a75142cc95 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java @@ -91,6 +91,13 @@ public class MogoMapUIController implements IMogoMapUIController { } } + @Override + public void loseLockMode() { + if ( mDelegate != null ) { + mDelegate.loseLockMode(); + } + } + @Override public void setLockZoom(int var1) { if (mDelegate != null) { @@ -182,9 +189,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 ); } } From 640b519fd5be323f717fe23ed52f1b54e878d072 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Thu, 5 Mar 2020 11:24:41 +0800 Subject: [PATCH 2/3] v1.0.2-opt branch: for opt --- .../com/mogo/map/impl/amap/AMapNaviViewWrapper.java | 10 ++++++++++ .../map/impl/amap/uicontroller/AMapUIController.java | 8 ++++++++ .../mogo/map/uicontroller/IMogoMapUIController.java | 8 ++++++++ .../main/java/com/mogo/map/MogoMapUIController.java | 8 ++++++++ map-upload.sh | 5 +++++ 5 files changed, 39 insertions(+) create mode 100755 map-upload.sh diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java index 41847b9f10..74196f7ddd 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java @@ -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,6 +34,7 @@ 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; @@ -679,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 ) ); + } } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java index cd0790f4af..48c5a0d45d 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/uicontroller/AMapUIController.java @@ -208,4 +208,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; + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java index a3546cc25f..05f2ebeabf 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java @@ -168,4 +168,12 @@ public interface IMogoMapUIController { * 强制刷新地图 */ void forceRender(); + + /** + * 计算两点之间的距离 + * @param p1 + * @param p2 + * @return + */ + float calculateLineDistance(MogoLatLng p1, MogoLatLng p2) throws Exception; } diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java index a75142cc95..3e02480d24 100644 --- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java +++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java @@ -201,4 +201,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; + } } diff --git a/map-upload.sh b/map-upload.sh new file mode 100755 index 0000000000..a53d5d66df --- /dev/null +++ b/map-upload.sh @@ -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 \ No newline at end of file From eaa12ba5d2534927473cfa0fd8fc7968a6b9a6e6 Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Mon, 9 Mar 2020 11:48:39 +0800 Subject: [PATCH 3/3] add api --- .idea/gradle.xml | 1 - .../com/mogo/launcher/MogoApplication.java | 1 - .../java/com/mogo/commons/network/Utils.java | 2 +- .../mogo/connection/socket/SocketManager.java | 8 +- gradle.properties | 2 +- .../map/impl/amap/AMapNaviViewWrapper.java | 2 - .../amap/navi/AimlessModeListenerAdapter.java | 182 +-------- .../impl/amap/navi/NaviListenerAdapter.java | 2 - .../mogo/map/impl/amap/utils/ObjectUtils.java | 65 ++++ .../main/java/com/mogo/map/MogoLatLng.java | 37 +- .../map/listener/MogoHosListenerRegister.java | 11 + .../map/navi/IMogoAimlessModeListener.java | 22 ++ .../com/mogo/map/navi/IMogoNaviListener.java | 4 +- .../map/navi/IMogoNaviListenerRegister.java | 12 + .../com/mogo/map/navi/MogoCongestionInfo.java | 133 +++++++ .../com/mogo/map/navi/MogoCongestionLink.java | 69 ++++ .../map/navi/MogoNaviListenerHandler.java | 32 +- .../java/com/mogo/map/navi/MogoTraffic.java | 182 ++++++++- .../module/apps/AppNavigatorFragment.java | 1 - .../module/apps/AppNavigatorPresenter.java | 3 + .../com/mogo/module/apps/AppsAdapter.java | 2 +- .../com/mogo/module/apps/model/AppEnum.java | 48 +-- .../mogo/module/apps/model/AppEnumHelper.java | 8 + .../com/mogo/module/apps/model/AppsModel.java | 17 +- .../module_apps_ic_default_icon.png | Bin 0 -> 2963 bytes .../module_apps_ic_default_icon.png | Bin 0 -> 4490 bytes .../extensions/entrance/EntranceFragment.java | 2 - .../com/mogo/module/main/MainActivity.java | 344 +++++++++--------- .../module/main/cards/MogoModulesHandler.java | 4 +- .../module/main/cards/MogoModulesManager.java | 47 ++- .../registercenter/MogoRegisterCenter.java | 12 +- .../MogoRegisterCenterHandler.java | 20 +- .../com/mogo/module/service/MogoServices.java | 20 +- .../module/service/receiver/MogoReceiver.java | 1 - .../com/mogo/service/IMogoServiceApis.java | 133 +++++++ .../com/mogo/service/MogoServicePaths.java | 23 +- .../service/module/IMogoRegisterCenter.java | 18 + .../mogo/service/impl/MogoServiceApis.java | 146 ++++++++ .../impl/singleton/SingletonsHolder.java | 46 +++ 39 files changed, 1239 insertions(+), 423 deletions(-) create mode 100644 libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoAimlessModeListener.java create mode 100644 libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCongestionInfo.java create mode 100644 libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCongestionLink.java create mode 100644 modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_default_icon.png create mode 100644 modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_default_icon.png create mode 100644 services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java create mode 100644 services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java create mode 100644 services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 4ef835cd80..8bda576128 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,7 +4,6 @@

+ * 续航模式回调 + */ +public interface IMogoAimlessModeListener { + + /** + * 巡航信息发生改变 + */ + void onUpdateTraffic2( MogoTraffic traffic ); + + /** + * 拥堵信息 + * + * @param info + */ + void onUpdateCongestion( MogoCongestionInfo info ); +} diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNaviListener.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNaviListener.java index 3047900c0e..abe7a663b8 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNaviListener.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNaviListener.java @@ -47,6 +47,8 @@ public interface IMogoNaviListener { /** * 巡航信息发生改变 + * Deprecated, use {@link IMogoAimlessModeListener#onUpdateTraffic2(MogoTraffic)} instead. */ - void onUpdateTraffic(MogoTraffic traffic); + @Deprecated + void onUpdateTraffic( MogoTraffic traffic ); } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNaviListenerRegister.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNaviListenerRegister.java index 1bf51743d6..b61789d1ad 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNaviListenerRegister.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNaviListenerRegister.java @@ -15,8 +15,20 @@ public interface IMogoNaviListenerRegister { */ void registerHostNaviListener( IMogoNaviListener listener ); + /** + * 注册巡航模式回调,各业务模块不用关注 + * + * @param listener + */ + void registerHostAimlessModeListener( IMogoAimlessModeListener listener ); + /** * 注销导航回调,各业务模块不用关注 */ void unregisterHostNaviListener(); + + /** + * 注销巡航回调,各业务模块不用关注 + */ + void unregisterHostAimlessModeListener(); } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCongestionInfo.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCongestionInfo.java new file mode 100644 index 0000000000..b064864c39 --- /dev/null +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCongestionInfo.java @@ -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 + *

+ * 拥堵详情 + */ +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]; + } + }; +} diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCongestionLink.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCongestionLink.java new file mode 100644 index 0000000000..47ac00720a --- /dev/null +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCongestionLink.java @@ -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 + *

+ * 描述 + */ +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]; + } + }; +} diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoNaviListenerHandler.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoNaviListenerHandler.java index f627910fe6..7cc2f00e1a 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoNaviListenerHandler.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoNaviListenerHandler.java @@ -6,7 +6,7 @@ package com.mogo.map.navi; *

* 地图监听注册管理 */ -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 ); + } + } } diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoTraffic.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoTraffic.java index a331207c91..dbc857f22e 100644 --- a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoTraffic.java +++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoTraffic.java @@ -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; } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java index 757688c9e8..8caeabbe1b 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorFragment.java @@ -34,7 +34,6 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi private View mCarSettings; private View mApps; - private AppsFragment mAppsFragment; private IMogoFragmentManager mMogoFragmentManager; /** diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java index b97c00d9a2..e7434e9822 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppNavigatorPresenter.java @@ -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 diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsAdapter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsAdapter.java index b3fdeed31e..95770cbe11 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsAdapter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsAdapter.java @@ -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() ); } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java index 2ed03d11d1..bd3ddcddcc 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnum.java @@ -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; + } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnumHelper.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnumHelper.java index 866310e26c..512ecf7411 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnumHelper.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppEnumHelper.java @@ -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; + } } diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java index cb4386e134..1917fef3e4 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/model/AppsModel.java @@ -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 ) { diff --git a/modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_default_icon.png b/modules/mogo-module-apps/src/main/res/drawable-ldpi/module_apps_ic_default_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..898f3ed59ac9f3248734a00e5902736c9367d455 GIT binary patch literal 2963 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 JPDHLkV1g@XpTGbB literal 0 HcmV?d00001 diff --git a/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_default_icon.png b/modules/mogo-module-apps/src/main/res/drawable-xhdpi/module_apps_ic_default_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e5ed46597ea8447d91ab1786a34e30f1c26b18bd GIT binary patch literal 4490 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 literal 0 HcmV?d00001 diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java index 5c12f60e1a..fb4e29f1f0 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java @@ -55,7 +55,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent private static final String TAG = "EntranceFragment"; - private View mSearch; private View mCommonAddress; @@ -127,7 +126,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent ShareControl.getInstance( getActivity() ).showDialog(); traceData( "1" ); } ); - mVRMode = findViewById( R.id.module_entrance_id_vr_mode ); mVRMode.setOnClickListener( view -> { } ); diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java index 88bc8aad06..b155b39538 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java @@ -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 *

* 描述:加载各个模块 */ -public class MainActivity extends MvpActivity 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 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 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 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 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 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 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: diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java index ad09d2b998..05b4af9399 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesHandler.java @@ -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 { /** * 地图加载完成回调 diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java index b2e397169e..db9875ff36 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/cards/MogoModulesManager.java @@ -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; diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenter.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenter.java index 879a992f9b..223aeaf2ed 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenter.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenter.java @@ -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 ) { + } } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java index 36323552a5..52e2d0a00e 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java @@ -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(); + } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java index c4c8588691..d258aa730f 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java @@ -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 diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java index a29baef682..74020aaa14 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java @@ -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; /** diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java new file mode 100644 index 0000000000..c5f43a8e08 --- /dev/null +++ b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java @@ -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 + *

+ * 描述 + */ + +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(); +} diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java index 09e1fb760e..7d1bee9a1e 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java @@ -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"; } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoRegisterCenter.java b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoRegisterCenter.java index 5fc070796e..360b0e5126 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoRegisterCenter.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoRegisterCenter.java @@ -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 ); + + } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java new file mode 100644 index 0000000000..3297ec44fd --- /dev/null +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java @@ -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 + *

+ * 描述 + */ + +@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; + } +} diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java b/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java new file mode 100644 index 0000000000..84f241d427 --- /dev/null +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/singleton/SingletonsHolder.java @@ -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 + *

+ * 描述 + */ +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 ); + } +}