diff --git a/.idea/misc.xml b/.idea/misc.xml index 707ee6e613..2dc54c489f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 81ffef0cdb..2864bdbd21 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -46,12 +46,13 @@ public class MogoApplication extends AbsMogoApplication { //运营位卡片,需要默认显示,放在第一个加载 MogoModulePaths.addModule(new MogoModule(AdCardConstants.TAG, AdCardConstants.MODULE_NAME)); - MogoModulePaths.addModule(new MogoModule(OnLineCarConstants.TAG, OnLineCarConstants.MODULE_NAME)); - MogoModulePaths.addModule(new MogoModule(V2XConst.PATH_V2X_UI, V2XConst.PATH_V2X_UI)); - MogoModulePaths.addModule(new MogoModule(TanluConstants.TAG, TanluConstants.MODEL_NAME)); - MogoModulePaths.addModule(new MogoModule(CallChatConstant.PROVIDER, CallChatConstant.MODULE_NAME)); MogoModulePaths.addModule(new MogoModule(MediaConstants.TAG, MediaConstants.MODULE_TYPE)); + MogoModulePaths.addModule(new MogoModule(CallChatConstant.PROVIDER, CallChatConstant.MODULE_NAME)); + MogoModulePaths.addModule(new MogoModule(TanluConstants.TAG, TanluConstants.MODEL_NAME)); + MogoModulePaths.addModule(new MogoModule(OnLineCarConstants.TAG, OnLineCarConstants.MODULE_NAME)); MogoModulePaths.addModule(new MogoModule( FreshNewsConstants.TAG, FreshNewsConstants.MODULE_NAME)); + + MogoModulePaths.addModule(new MogoModule(V2XConst.PATH_V2X_UI, V2XConst.PATH_V2X_UI)); MogoModulePaths.addModule(new MogoModule(PushUIConstants.TAG, PushUIConstants.TAG)); MogoModulePaths.addModule(new MogoModule( BackToLauncherConst.MODULE_PATH, BackToLauncherConst.MODULE_NAME)); Log.i("timer", "cost " + (System.currentTimeMillis() - start) + "ms"); diff --git a/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/SocketManager.java b/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/SocketManager.java index 5ceced9c21..2faf7b6bed 100644 --- a/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/SocketManager.java +++ b/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/SocketManager.java @@ -107,7 +107,7 @@ public class SocketManager implements IMogoSocketManager, OnSocketReceiveCallbac object = GsonUtil.objectFromJson( payload.getPayload().toStringUtf8(), listener.target() ); } if ( listener != null ) { - Logger.d( TAG, "received msgId = %s", msgId ); + Logger.d( TAG, "received msgId = %s, content = %s", msgId, payload.getPayload().toStringUtf8() ); listener.onMsgReceived( object ); } } diff --git a/foudations/mogo-utils/src/main/java/com/mogo/utils/ThreadPoolService.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/ThreadPoolService.java index b94b28b555..53315efd95 100644 --- a/foudations/mogo-utils/src/main/java/com/mogo/utils/ThreadPoolService.java +++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/ThreadPoolService.java @@ -5,7 +5,7 @@ import java.util.concurrent.Executors; public class ThreadPoolService { - private static final ExecutorService SERVICE = Executors.newScheduledThreadPool( 3 ); + private static final ExecutorService SERVICE = Executors.newFixedThreadPool( 3 ); private ThreadPoolService() { } diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/marker/AMapMarkerWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/marker/AMapMarkerWrapper.java index e248076708..a98e791870 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/marker/AMapMarkerWrapper.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/marker/AMapMarkerWrapper.java @@ -294,7 +294,13 @@ public class AMapMarkerWrapper implements IMogoMarker, Observer { @Override public String getOwner() { - return this.mOwner == null ? mMogoMarkerOptions.getOwner() : mOwner; + if ( mOwner != null ) { + return mOwner; + } + if ( mMogoMarkerOptions != null ) { + return mMogoMarkerOptions.getOwner(); + } + return null; } @Override 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 b155b39538..7d8001352c 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 @@ -40,6 +40,7 @@ import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.intent.IMogoIntentManager; import com.mogo.service.map.IMogoMapService; import com.mogo.service.module.IMogoModuleProvider; +import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.utils.logger.Logger; import org.json.JSONException; @@ -65,6 +66,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme private MogoModulesHandler mMogoModuleHandler; private IMogoCardManager mMogoCardManager; private IMogoFragmentManager mMogoFragmentManager; + private IMogoStatusManager mMogoStatusManager; private OrientedViewPager mCardsContainer; private VerticalStackTransformer mTransformer; @@ -100,73 +102,66 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme 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; + mCardsContainer.setOnPageChangeListener( 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 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 ); } + } else if ( state == ViewPager.SCROLL_STATE_IDLE ) { + mCardFlipStatus = false; + mTransformer.resetOffsetScroll(); + } - @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(); - } + int cardSize = mCardModulesAdapter.getCount(); - 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" ); + 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" ); + } - @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 ); @@ -261,6 +256,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme } ); mMogoIntentManager = mServiceApis.getIntentManagerApi(); + mMogoStatusManager = mServiceApis.getStatusManagerApi(); registerVoiceCmd(); Log.i( "timer", "cost " + ( System.currentTimeMillis() - start ) + "ms" ); } @@ -324,7 +320,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme @Override public boolean onMarkerClicked( IMogoMarker marker ) { - switch2Card( marker.getOwner() ); + switch2Card( marker.getOwner(), false ); if ( mMogoModuleHandler != null ) { mMogoModuleHandler.onMarkerClicked( marker ); } @@ -332,17 +328,23 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme } @Override - public void switch2Card( String cardType ) { - if ( mCardModulesAdapter != null ) { + public void switch2Card( String cardType, boolean lockCar ) { + if ( mCardModulesAdapter == null ) { + return; + } - 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 ); - } + 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 ); + } + + if ( lockCar ) { + mMogoStatusManager.setUserInteractionStatus( TAG, true, false ); + mMogoMapUIController.recoverLockMode(); } } diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java index 459547fb36..717ff4cdc3 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainPresenter.java @@ -67,11 +67,11 @@ public class MainPresenter extends Presenter< MainView > { @Override public void onCreate( @NonNull LifecycleOwner owner ) { super.onCreate( owner ); - CardSwitchLiveData.getInstance().observeForever( to -> { - if ( TextUtils.isEmpty( to ) ) { + CardSwitchLiveData.getInstance().observeForever( cardInfo -> { + if ( TextUtils.isEmpty( cardInfo.mCardName ) ) { return; } - mView.switch2Card( to ); + mView.switch2Card( cardInfo.mCardName, true ); } ); mAnalytics = ( IMogoAnalytics ) ARouter.getInstance().build( MogoServicePaths.PATH_UTILS_ANALYTICS ).navigation( getContext() ); mCardStartShowTime = System.currentTimeMillis(); diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainView.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainView.java index ac69a5da5e..a048081549 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainView.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainView.java @@ -15,7 +15,7 @@ public interface MainView extends IView { * * @param cardType */ - void switch2Card( String cardType ); + void switch2Card( String cardType, boolean lockCar ); /** * 加载卡片 diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MogoCardManager.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MogoCardManager.java index b34f781b5a..69b8c1bdd9 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MogoCardManager.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MogoCardManager.java @@ -3,6 +3,7 @@ package com.mogo.module.main; import android.content.Context; import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.module.main.livedata.CardInfo; import com.mogo.module.main.livedata.CardSwitchLiveData; import com.mogo.service.MogoServicePaths; import com.mogo.service.cardmanager.IMogoCardChangedListener; @@ -25,7 +26,7 @@ public class MogoCardManager implements IMogoCardManager { @Override public void switch2( String cardType ) { - CardSwitchLiveData.getInstance().postValue( cardType ); + CardSwitchLiveData.getInstance().postValue( new CardInfo( cardType, false ) ); } @Override @@ -51,6 +52,11 @@ public class MogoCardManager implements IMogoCardManager { } } + @Override + public void switch2( String cardType, boolean lockCar ) { + CardSwitchLiveData.getInstance().postValue( new CardInfo( cardType, lockCar ) ); + } + @Override public void init( Context context ) { 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 db9875ff36..2b34ce4a69 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 @@ -148,7 +148,8 @@ public class MogoModulesManager implements MogoModulesHandler, providers.add( provider ); } } - return sort( providers ); + return providers; +// return sort( providers ); v2.0.2暂不支持变顺序 } private List< IMogoModuleProvider > sort( List< IMogoModuleProvider > modules ) { diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/livedata/CardInfo.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/livedata/CardInfo.java new file mode 100644 index 0000000000..08cee036af --- /dev/null +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/livedata/CardInfo.java @@ -0,0 +1,49 @@ +package com.mogo.module.main.livedata; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * @author congtaowang + * @since 2020-03-09 + *

+ * 描述 + */ +public class CardInfo implements Parcelable { + + public String mCardName; + public boolean mLockCar; + + public CardInfo( String cardName, boolean lockCar ) { + this.mCardName = cardName; + this.mLockCar = lockCar; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel( Parcel dest, int flags ) { + dest.writeString( this.mCardName ); + dest.writeByte( this.mLockCar ? ( byte ) 1 : ( byte ) 0 ); + } + + protected CardInfo( Parcel in ) { + this.mCardName = in.readString(); + this.mLockCar = in.readByte() != 0; + } + + public static final Parcelable.Creator< CardInfo > CREATOR = new Parcelable.Creator< CardInfo >() { + @Override + public CardInfo createFromParcel( Parcel source ) { + return new CardInfo( source ); + } + + @Override + public CardInfo[] newArray( int size ) { + return new CardInfo[size]; + } + }; +} diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/livedata/CardSwitchLiveData.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/livedata/CardSwitchLiveData.java index fafe630a3d..0f078ce718 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/livedata/CardSwitchLiveData.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/livedata/CardSwitchLiveData.java @@ -8,7 +8,7 @@ import androidx.lifecycle.MutableLiveData; *

* 切换卡片 */ -public class CardSwitchLiveData extends MutableLiveData< String > { +public class CardSwitchLiveData extends MutableLiveData< CardInfo > { private CardSwitchLiveData() { // private constructor diff --git a/modules/mogo-module-service/build.gradle b/modules/mogo-module-service/build.gradle index 88ce45edb7..4ccbff8bf0 100644 --- a/modules/mogo-module-service/build.gradle +++ b/modules/mogo-module-service/build.gradle @@ -29,6 +29,11 @@ android { } } + compileOptions { + sourceCompatibility 1.8 + targetCompatibility 1.8 + } + } dependencies { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java index c5b640fc98..19e50fb9a2 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MarkerServiceHandler.java @@ -10,6 +10,7 @@ import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.common.entity.MarkerResponse; import com.mogo.module.common.entity.MarkerShowEntity; import com.mogo.module.service.marker.MapMarkerManager; +import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; import com.mogo.service.analytics.IMogoAnalytics; import com.mogo.service.cardmanager.IMogoCardManager; @@ -28,6 +29,7 @@ import com.mogo.service.statusmanager.IMogoStatusManager; public class MarkerServiceHandler { private static final String TAG = "MarkerServiceHandler"; + private static IMogoServiceApis mApis; private static IMogoMapService mMapService; private static IMogoMarkerManager mMarkerManager; @@ -44,22 +46,22 @@ public class MarkerServiceHandler { private static MapMarkerManager mMapMarkerManager; + public static void init( final Context context ) { + mApis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation( context ); + mMapService = mApis.getMapServiceApi(); + mImageloader = mApis.getImageLoaderApi(); + mMogoStatusManager = mApis.getStatusManagerApi(); + mMogoSocketManager = mApis.getSocketManagerApi( context ); + mMogoCardManager = mApis.getCardManagerApi(); + mMogoAnalytics = mApis.getAnalyticsApi(); - public static void init(final Context context) { - mMapService = (IMogoMapService) ARouter.getInstance().build(MogoServicePaths.PATH_SERVICES_MAP).navigation(context); - mImageloader = (IMogoImageloader) ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_IMAGE_LOADER).navigation(context); - mMogoStatusManager = (IMogoStatusManager) ARouter.getInstance().build(MogoServicePaths.PATH_STATUS_MANAGER).navigation(context); - mMogoSocketManager = (IMogoSocketManager) ARouter.getInstance().build(MogoServicePaths.PATH_SOCKET_MANAGER).navigation(); - mMogoCardManager = (IMogoCardManager) ARouter.getInstance().build(MogoServicePaths.PATH_CARD_MANAGER).navigation(); - mMogoAnalytics = (IMogoAnalytics) ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_ANALYTICS).navigation(); - - mMarkerManager = mMapService.getMarkerManager(context); - mNavi = mMapService.getNavi(context); + mMarkerManager = mMapService.getMarkerManager( context ); + mNavi = mMapService.getNavi( context ); mMapUIController = mMapService.getMapUIController(); - mLocationClient = mMapService.getSingletonLocationClient(context); + mLocationClient = mMapService.getSingletonLocationClient( context ); - mMapMarkerManager = MapMarkerManager.getInstance(context); - mMapMarkerManager.init(context); + mMapMarkerManager = MapMarkerManager.getInstance(); + mMapMarkerManager.init( context ); } public static IMogoMapService getMapService() { @@ -112,30 +114,33 @@ public class MarkerServiceHandler { /** * 绘制Marker * 建议使用 + * * @see MapMarkerManager#drawMapMarker(MarkerResponse) */ @Deprecated - public static void drawMapMarker(MarkerResponse response) { - getMapMarkerManager().drawMapMarker(response); + public static void drawMapMarker( MarkerResponse response ) { + getMapMarkerManager().drawMapMarker( response ); } /** * 绘制Marker * 建议使用 + * * @see MapMarkerManager#drawMapMarker(MarkerShowEntity) */ @Deprecated - public static void drawMapMarker(MarkerShowEntity markerShowEntity) { - getMapMarkerManager().drawMapMarker(markerShowEntity); + public static void drawMapMarker( MarkerShowEntity markerShowEntity ) { + getMapMarkerManager().drawMapMarker( markerShowEntity ); } /** * 对指定类型高亮处理 * 建议使用 - * @see MapMarkerManager#highlightedMarker(String,boolean) + * + * @see MapMarkerManager#highlightedMarker(String, boolean) */ @Deprecated - public static void highlightedMarker(String typeTag) { - getMapMarkerManager().highlightedMarker(typeTag,false); + public static void highlightedMarker( String typeTag ) { + getMapMarkerManager().highlightedMarker( typeTag, false ); } } 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 d258aa730f..0403d85b76 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 @@ -143,11 +143,7 @@ public class MogoServices implements IMogoMapListener, mRefreshRemainingTime -= ServiceConst.DECREASE_INTERVAL; if ( mRefreshRemainingTime == 0 ) { Logger.d( TAG, "move to center and refresh data." ); - mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, false ); - mUiController.recoverLockMode(); - mStatusManager.setUserInteractionStatus( TAG, true, false ); - mUiController.changeZoom( 16.0f ); - notifyRefreshData( mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback ); + invokeAutoRefresh(); } else { mHandler.sendEmptyMessageDelayed( msg.what, ServiceConst.DECREASE_INTERVAL ); } @@ -158,11 +154,21 @@ public class MogoServices implements IMogoMapListener, } if ( mLoopRequest ) { Logger.d( TAG, "补偿刷新触发" ); - notifyRefreshData( mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback ); + invokeAutoRefresh(); } break; } } + + /** + * 自动刷新:锁车、缩放比例:16、半径 2KM + */ + private void invokeAutoRefresh() { + mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, false ); + mUiController.setLockZoom( ServiceConst.DEFAULT_LOCK_CAR_ZOOM_LEVEL ); + mUiController.recoverLockMode(); + notifyRefreshData( mLastAutoRefreshLocation, ServiceConst.DEFAULT_AUTO_REFRESH_DATA_RADIUS, mAutoRefreshCallback ); + } }; private Context mContext; @@ -246,6 +252,7 @@ public class MogoServices implements IMogoMapListener, registerCenter.registerMogoLocationListener( ServiceConst.TYPE, this ); registerCenter.registerMogoNaviListener( ServiceConst.TYPE, this ); registerCenter.registerMogoMapListener( ServiceConst.TYPE, this ); + registerCenter.registerMogoAimlessModeListener( ServiceConst.TYPE, this ); mIntentManager = ( IMogoIntentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_INTENT_MANAGER ).navigation( context ); mIntentManager.registerIntentListener( MogoReceiver.ACTIION_ADAS, this ); @@ -500,7 +507,7 @@ public class MogoServices implements IMogoMapListener, mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, false ); mUiController.recoverLockMode(); mStatusManager.setUserInteractionStatus( TAG, true, false ); - mUiController.changeZoom( 16.0f ); + mUiController.changeZoom( ServiceConst.DEFAULT_ZOOM_LEVEL ); mLastAutoRefreshLocation = point; notifyRefreshData( mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback ); } @@ -548,8 +555,8 @@ public class MogoServices implements IMogoMapListener, case USER_INTERACTED: if ( isTrue && !mRefreshRemainingTimeStatus ) { mRefreshRemainingTimeStatus = true; - mRefreshRemainingTime += mAutoRefreshStrategy.getInterruptInterval(); - Logger.i( TAG, "用户状态改变,自动刷新时间延时,%s ms后自动刷新", mRefreshRemainingTime ); + mRefreshRemainingTime = ServiceConst.DEFAULT_AUTO_REFRESH_WHEN_INTERRUPT; + Logger.i( TAG, "用户状态改变,下次刷新时间:%ss后", mRefreshRemainingTime ); } break; case SEARCH_UI: @@ -636,7 +643,7 @@ public class MogoServices implements IMogoMapListener, return; } int status = intent.getIntExtra( MogoReceiver.PARAM_ADAS_STATUS, 0 ); - mUiController.setLockZoom( status == 1 ? 15 : 16 ); + mUiController.setLockZoom( status == 1 ? 15 : ServiceConst.DEFAULT_LOCK_CAR_ZOOM_LEVEL ); mStatusManager.setADASUIShow( ServiceConst.TYPE, status == 1 ); mUiController.showMyLocation( true ); } else if ( Intent.ACTION_POWER_CONNECTED.equals( command ) ) { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java index 67fada7976..b2d7b285b2 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java @@ -62,4 +62,30 @@ public class ServiceConst { */ public static final String CARD_TYPE_NOVELTY = "CARD_TYPE_NOVELTY"; + /** + * 运营位 + */ + public static final String CARD_TYPE_BUSINESS_OPERATION = "CARD_TYPE_BUSINESS_OPERATION"; + + /** + * 默认地图缩放比例 + */ + public static final float DEFAULT_ZOOM_LEVEL = 16.0f; + + /** + * 默认地图锁车缩放比例 + */ + public static final int DEFAULT_LOCK_CAR_ZOOM_LEVEL = 16; + + /** + * 自动酸辛默认半径 + */ + public static final int DEFAULT_AUTO_REFRESH_DATA_RADIUS = 2_000; + + /** + * 30 s + */ + public static final int DEFAULT_AUTO_REFRESH_WHEN_INTERRUPT = 30 * 1_000; + + } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index dcc23e26fa..923e133000 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -1,13 +1,10 @@ package com.mogo.module.service.marker; import android.content.Context; -import android.os.Handler; -import android.os.Looper; import android.text.TextUtils; import android.view.animation.BounceInterpolator; import android.view.animation.OvershootInterpolator; -import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.map.MogoLatLng; import com.mogo.map.location.MogoLocation; import com.mogo.map.marker.IMogoMarker; @@ -24,7 +21,6 @@ import com.mogo.module.common.entity.MarkerResponse; import com.mogo.module.common.entity.MarkerShareMusic; import com.mogo.module.common.entity.MarkerShowEntity; import com.mogo.module.service.MarkerServiceHandler; -import com.mogo.module.service.MogoServiceProvider; import com.mogo.module.service.MogoServices; import com.mogo.module.service.ServiceConst; import com.mogo.module.service.Utils; @@ -51,31 +47,35 @@ import java.util.Map; * desc : 大而全的Marker管理 * version: 1.0 */ -public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessageListener { +public class MapMarkerManager implements IMogoMarkerClickListener, + IMogoOnMessageListener< MarkerResponse >, + IMogoCardChangedListener { private static final String TAG = "MapMarkerManager"; // 是否同步在线数据给在线卡片, ACC ON 的标记记录 - private boolean isACC_ON = false; + private boolean mIsAccOn = false; private boolean isSynchronousOnLineData = true; // 是否选中在线卡片及气泡,语音搜索触发 - private boolean isCheckOnLineData = false; + private boolean mIsAISearchOnlineData = false; - private static Context mContext; + private Context mContext; // 最后一次选中的气泡 - private static IMogoMarker mLastCheckMarker; + private IMogoMarker mLastCheckMarker; private static MapMarkerManager mMarkerManager; - private static String mLastHighLightModule = ""; + private String mCurrentModuleName = ServiceConst.CARD_TYPE_BUSINESS_OPERATION; // 记录其它已经缩小的Marker - public static ArrayList alreadySmallMarker = new ArrayList<>(); + public ArrayList< String > alreadySmallMarker = new ArrayList<>(); // 距离用户最近的Marker - private IMogoMarker mNearlyMogoMarker = null; + private IMogoMarker mNearlyMarker = null; + // 记录上次请求数据,切换卡片时做数据处理 + private MarkerCardResult mLastDataResult; private MapMarkerManager() { } - public static synchronized MapMarkerManager getInstance(Context context) { - synchronized (MapMarkerManager.class) { - if (mMarkerManager == null) { + public static synchronized MapMarkerManager getInstance() { + synchronized ( MapMarkerManager.class ) { + if ( mMarkerManager == null ) { mMarkerManager = new MapMarkerManager(); } } @@ -88,96 +88,100 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag * * @param context */ - public void init(Context context) { + public void init( Context context ) { mContext = context; // 长连接 - MarkerServiceHandler - .getMogoSocketManager() - .registerOnMessageListener(401001, this); - - MarkerServiceHandler.getMogoCardManager().registerCardChangedListener("LAUNCHER_MARKER_MODULE", new IMogoCardChangedListener() { - - @Override - public void onSwitched(int position, String moduleName) { - Logger.d(TAG, "当前C位卡片:" + moduleName); - highlightedMarker(moduleName, false); - mLastHighLightModule = moduleName; - if (!isACC_ON) { - isACC_ON = true; - MogoServices.getInstance().refreshStrategy(); - } - } - }); + MarkerServiceHandler.getMogoSocketManager().registerOnMessageListener( 401001, this ); + MarkerServiceHandler.getMogoCardManager().registerCardChangedListener( "LAUNCHER_MARKER_MODULE", this ); } // ACC ON 的时候重置为true,ACC OFF 设置为 false - public void setCheckOnLineData(boolean checkOnLineData) { - isACC_ON = checkOnLineData; + // 保留 - 外部模块调用 + public void setCheckOnLineData( boolean checkOnLineData ) { + mIsAccOn = checkOnLineData; + } + + @Override + public void onSwitched( int position, String moduleName ) { + Logger.d( TAG, "当前C位卡片:" + moduleName ); +// highlightedMarker( moduleName, false ); + mCurrentModuleName = moduleName; + if ( !mIsAccOn ) { + mIsAccOn = true; + Logger.d( TAG, "refresh data" ); + MogoServices.getInstance().refreshStrategy(); + } else { + runOnTargetThread( () -> { + Logger.d( TAG, "switch data" ); + MarkerServiceHandler.getMarkerManager().removeMarkers(); + drawMarkerByCurrentType( mLastDataResult ); + } ); + } } /** * 地图上的Marker点击回调 */ @Override - public boolean onMarkerClicked(IMogoMarker marker) { - Logger.d(TAG, "onMarkerClicked 点击了大而全中的Marker:" + marker); + public boolean onMarkerClicked( IMogoMarker marker ) { + Logger.d( TAG, "onMarkerClicked 点击了大而全中的Marker:" + marker ); try { - if (mLastCheckMarker != null) { + if ( mLastCheckMarker != null ) { // 判断点击的是否是同一个 - if (marker.equals(mLastCheckMarker)) { - Logger.d(TAG, "onMarkerClicked 与上一次点击的Marker一样,不做处理:" + marker); + if ( marker.equals( mLastCheckMarker ) ) { + Logger.d( TAG, "onMarkerClicked 与上一次点击的Marker一样,不做处理:" + marker ); return false; } // 将上次选中 Marker 设置为未选中状态 - closeMarker(mLastCheckMarker); + closeMarker( mLastCheckMarker ); } // 将当前的Marker设置为选中 - openMarker(marker); + openMarker( marker ); // 数据统计代码 - final Map properties = new HashMap<>(); - switch (mLastCheckMarker.getOwner()) { + final Map< String, Object > properties = new HashMap<>(); + switch ( mLastCheckMarker.getOwner() ) { case ServiceConst.CARD_TYPE_CARS_CHATTING: - properties.put("type", 3); + properties.put( "type", 3 ); break; case ServiceConst.CARD_TYPE_USER_DATA: - properties.put("type", 5); + properties.put( "type", 5 ); break; case ServiceConst.CARD_TYPE_ROAD_CONDITION: - properties.put("type", 2); + properties.put( "type", 2 ); break; case ServiceConst.CARD_TYPE_NOVELTY: - MarkerShowEntity showEntity = (MarkerShowEntity) mLastCheckMarker.getObject(); + MarkerShowEntity showEntity = ( MarkerShowEntity ) mLastCheckMarker.getObject(); Object bindObj = showEntity.getBindObj(); - if (bindObj instanceof MarkerNoveltyInfo) { - switch (((MarkerNoveltyInfo) bindObj).getPoiType()) { + if ( bindObj instanceof MarkerNoveltyInfo ) { + switch ( ( ( MarkerNoveltyInfo ) bindObj ).getPoiType() ) { case MarkerPoiTypeEnum.GAS_STATION: - properties.put("type", 4); + properties.put( "type", 4 ); break; case MarkerPoiTypeEnum.TRAFFIC_CHECK: - properties.put("type", 8); + properties.put( "type", 8 ); break; case MarkerPoiTypeEnum.ROAD_CLOSED: - properties.put("type", 7); + properties.put( "type", 7 ); break; case MarkerPoiTypeEnum.SHOP_DISCOUNT: - properties.put("type", 9); + properties.put( "type", 9 ); break; case MarkerPoiTypeEnum.FOURS_4S: - properties.put("type", 10); + properties.put( "type", 10 ); break; } } break; case ServiceConst.CARD_TYPE_SHARE_MUSIC: - properties.put("type", 6); + properties.put( "type", 6 ); break; } - MarkerServiceHandler.getMogoAnalytics().track("Launcher_Icon_Click", properties); + MarkerServiceHandler.getMogoAnalytics().track( "Launcher_Icon_Click", properties ); - } catch (Exception e) { + } catch ( Exception e ) { e.printStackTrace(); } return false; @@ -185,81 +189,81 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag // 对指定类型高亮处理 - public synchronized static void highlightedMarker(final String typeTag) { - highlightedMarker(typeTag, false); + public synchronized void highlightedMarker( final String typeTag ) { + highlightedMarker( typeTag, false ); } - public synchronized static void highlightedMarker(final String typeTag, final boolean netDataRefresh) { + public synchronized void highlightedMarker( final String typeTag, final boolean netDataRefresh ) { try { - Logger.e(TAG, "上一次选中的卡片类型:mLastHighLightModule==" + mLastHighLightModule); - if (!TextUtils.isEmpty(mLastHighLightModule) && TextUtils.equals(mLastHighLightModule, typeTag) && !netDataRefresh) { + Logger.e( TAG, "上一次选中的卡片类型:mCurrentModuleName==" + mCurrentModuleName ); + if ( !TextUtils.isEmpty( mCurrentModuleName ) && TextUtils.equals( mCurrentModuleName, typeTag ) && !netDataRefresh ) { return; } // 从已经缩小的记录删除 - alreadySmallMarker.remove(typeTag); - List currentHighLightList = MarkerServiceHandler.getMarkerManager().getMarkers(typeTag); + alreadySmallMarker.remove( typeTag ); + List< IMogoMarker > currentHighLightList = MarkerServiceHandler.getMarkerManager().getMarkers( typeTag ); - if (currentHighLightList == null || currentHighLightList.size() == 0) { + if ( currentHighLightList == null || currentHighLightList.size() == 0 ) { alreadySmallMarker.clear(); // 放大所有的气泡 - Map> lastHighLightList = MarkerServiceHandler.getMarkerManager().getAllMarkers(); - for (String markerName : lastHighLightList.keySet()) { - setMarkersBig(lastHighLightList.get(markerName)); + Map< String, List< IMogoMarker > > lastHighLightList = MarkerServiceHandler.getMarkerManager().getAllMarkers(); + for ( String markerName : lastHighLightList.keySet() ) { + setMarkersBig( lastHighLightList.get( markerName ) ); } } else { // 缩小其他的气泡 - Map> lastHighLightList = MarkerServiceHandler.getMarkerManager().getAllMarkers(); - for (String markerName : lastHighLightList.keySet()) { - if (!markerName.equals(typeTag)) { - if (!alreadySmallMarker.contains(markerName)) { - alreadySmallMarker.add(markerName); - setMarkersSmall(lastHighLightList.get(markerName)); + Map< String, List< IMogoMarker > > lastHighLightList = MarkerServiceHandler.getMarkerManager().getAllMarkers(); + for ( String markerName : lastHighLightList.keySet() ) { + if ( !markerName.equals( typeTag ) ) { + if ( !alreadySmallMarker.contains( markerName ) ) { + alreadySmallMarker.add( markerName ); + setMarkersSmall( lastHighLightList.get( markerName ) ); } } } // 将当前卡片选中的气泡放大 - setMarkersBig(currentHighLightList); + setMarkersBig( currentHighLightList ); } - } catch (Exception e) { + } catch ( Exception e ) { e.printStackTrace(); } } - private static void setMarkersBig(List markers) { - if (markers == null || markers.isEmpty()) { + private static void setMarkersBig( List< IMogoMarker > markers ) { + if ( markers == null || markers.isEmpty() ) { return; } - for (IMogoMarker mogoMarker : markers) { - if (mogoMarker == null || mogoMarker.isDestroyed()) { + for ( IMogoMarker mogoMarker : markers ) { + if ( mogoMarker == null || mogoMarker.isDestroyed() ) { continue; } try { - mogoMarker.startScaleAnimation(0.6f, 1f, 0.6f, 1f, 1000, new BounceInterpolator()); - } catch (Exception e) { - Logger.e(TAG, e, "error."); + mogoMarker.startScaleAnimation( 0.6f, 1f, 0.6f, 1f, 1000, new BounceInterpolator() ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); } } } - private static void setMarkersSmall(List markers) { - if (markers == null || markers.isEmpty()) { + private static void setMarkersSmall( List< IMogoMarker > markers ) { + if ( markers == null || markers.isEmpty() ) { return; } - for (IMogoMarker mogoMarker : markers) { - smallMarker(mogoMarker); + for ( IMogoMarker mogoMarker : markers ) { + smallMarker( mogoMarker ); } } - private static void smallMarker(IMogoMarker mogoMarker) { - if (mogoMarker == null || mogoMarker.isDestroyed()) { + private static void smallMarker( IMogoMarker mogoMarker ) { + if ( mogoMarker == null || mogoMarker.isDestroyed() ) { return; } try { - mogoMarker.startScaleAnimation(1f, 0.6f, 1f, 0.6f, 300, new OvershootInterpolator()); - } catch (Exception e) { - Logger.e(TAG, e, "error."); + mogoMarker.startScaleAnimation( 1f, 0.6f, 1f, 0.6f, 300, new OvershootInterpolator() ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); } } @@ -268,261 +272,372 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag * * @param marker 要关闭的Marker */ - public synchronized void closeMarkerSelect(IMogoMarker marker) { + public synchronized void closeMarkerSelect( IMogoMarker marker ) { // 将上次选中 Marker 设置为未选中状态 - if (marker != null) { - Logger.i(TAG, "closeMarkerSelect 将出Marker详情关闭:" + marker); - closeMarker(marker); + if ( marker != null ) { + Logger.i( TAG, "closeMarkerSelect 将出Marker详情关闭:" + marker ); + closeMarker( marker ); mLastCheckMarker = null; } } // 展开气泡 - private void openMarker(IMogoMarker mogoMarker) { - if (mogoMarker != null) { - if (mLastCheckMarker != null) { - closeMarker(mLastCheckMarker); - } - mLastCheckMarker = mogoMarker; - Object object = mogoMarker.getObject(); - if (object != null) { - MarkerShowEntity markerShowEntity = (MarkerShowEntity) object; - markerShowEntity.setChecked(true); - IMarkerView markerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions()); - mogoMarker.setIcon(ViewUtils.fromView(markerView.getView())); - mogoMarker.setToTop(); - } + private void openMarker( IMogoMarker mogoMarker ) { + if ( mogoMarker == null ) { + return; + } + if ( mLastCheckMarker != null ) { + closeMarker( mLastCheckMarker ); + } + mLastCheckMarker = mogoMarker; + Object object = mogoMarker.getObject(); + if ( object != null ) { + MarkerShowEntity markerShowEntity = ( MarkerShowEntity ) object; + markerShowEntity.setChecked( true ); + IMarkerView markerView = MapMarkerAdapter.getMarkerView( mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions() ); + mogoMarker.setIcon( ViewUtils.fromView( markerView.getView() ) ); + mogoMarker.setToTop(); } } // 折叠气泡 - private void closeMarker(IMogoMarker mogoMarker) { - if (mogoMarker != null) { - Object object = mogoMarker.getObject(); - if (object != null) { - MarkerShowEntity markerShowEntity = (MarkerShowEntity) object; - markerShowEntity.setChecked(false); - IMarkerView markerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions()); - mogoMarker.setIcon(ViewUtils.fromView(markerView.getView())); - } + private void closeMarker( IMogoMarker mogoMarker ) { + if ( mogoMarker == null ) { + return; + } + Object object = mogoMarker.getObject(); + if ( object != null ) { + MarkerShowEntity markerShowEntity = ( MarkerShowEntity ) object; + markerShowEntity.setChecked( false ); + IMarkerView markerView = MapMarkerAdapter.getMarkerView( mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions() ); + mogoMarker.setIcon( ViewUtils.fromView( markerView.getView() ) ); } } // 绘制Marker - public synchronized void drawMapMarker(MarkerResponse response) { - JSONArray array = new JSONArray(); + public synchronized void drawMapMarker( MarkerResponse response ) { + + if ( response == null || response.getResult() == null ) { + return; + } // 解析不同的Marker类型,然后对应的进行绘制 - if (response != null && response.getResult() != null) { + if ( response != null && response.getResult() != null ) { - MarkerCardResult markerCardResult = response.getResult(); + mLastDataResult = response.getResult(); // 语音触发的在线车辆搜索,采用增量的形式绘制 - if (markerCardResult.getDataType() != null && - markerCardResult.getDataType().size() == 1 && - markerCardResult.getDataType().contains(ServiceConst.CARD_TYPE_USER_DATA)) { - MarkerServiceHandler.getMarkerManager().removeMarkers(ServiceConst.CARD_TYPE_USER_DATA); - MarkerServiceHandler.getMogoCardManager().switch2(ServiceConst.CARD_TYPE_USER_DATA); - isCheckOnLineData = true; + if ( mIsAISearchOnlineData = isOnlineCarDataOnly( mLastDataResult ) ) { + MarkerServiceHandler.getMarkerManager().removeMarkers( ServiceConst.CARD_TYPE_USER_DATA ); + MarkerServiceHandler.getMogoCardManager().switch2( ServiceConst.CARD_TYPE_USER_DATA ); } else { mLastCheckMarker = null; // 清空所有地图上绘制的Marker MarkerServiceHandler.getMarkerManager().removeMarkers(); } - List onlineCarList = markerCardResult.getOnlineCar(); - List exploreWayList = markerCardResult.getExploreWay(); - List shareMusicList = markerCardResult.getShareMusic(); - List noveltyInfoList = markerCardResult.getNoveltyInfo(); - - if (onlineCarList != null) { - double nearlyDistance = Float.MAX_VALUE; - for (MarkerOnlineCar markerOnlineCar : onlineCarList) { - MarkerLocation markerLocation = markerOnlineCar.getLocation(); - - MarkerShowEntity markerShowEntity = new MarkerShowEntity(); - markerShowEntity.setBindObj(markerOnlineCar); - markerShowEntity.setMarkerLocation(markerLocation); - markerShowEntity.setMarkerType(markerOnlineCar.getType()); - markerShowEntity.setTextContent(markerOnlineCar.getUserInfo().getUserName()); - markerShowEntity.setIconUrl(markerOnlineCar.getUserInfo().getUserHead()); - - IMogoMarker iMogoMarker = drawMapMarker(markerShowEntity); - // 计算在线车辆距离当前车辆的距离,每次都与最后一次距离最近的进行比较,保留距离最近的车辆,进行卡片展示 - try { - // 当前车辆的位置 - MogoLocation currentLocation = MarkerServiceHandler.getMogoLocationClient().getLastKnowLocation(); - - // 计算车辆距离指定气泡的距离 - float calculateDistance = Utils.calculateLineDistance( - new MogoLatLng(markerLocation.getLat(), markerLocation.getLon()), - new MogoLatLng(currentLocation.getLatitude(), currentLocation.getLongitude()) - ); - -// Logger.d("点之间距离", -// "当前车辆经纬度:" + -// "\n\tlatitude=" + currentLocation.getLatitude() + -// "\n\tlongitude=" + currentLocation.getLongitude() + -// "\n气泡经纬度:" + markerLocation + -// "\n相距:" + calculateDistance + "米"); - - // 进行比较,保留最近的一个数据 - if (calculateDistance < nearlyDistance) { - nearlyDistance = calculateDistance; - mNearlyMogoMarker = iMogoMarker; - } - - } catch (Exception e) { - e.printStackTrace(); - } - } - Logger.d(TAG, "距离当前车辆位置最近的距离为:" + nearlyDistance); - fillNumberTrackEventBody(array, 3, onlineCarList.size()); - } - - // 将数据同步给探路,避免探路每次 perform 的时候去拉取,造成消耗 - MogoDataHandler.getInstance().invoke(ServiceConst.CARD_TYPE_ROAD_CONDITION, exploreWayList); - if (exploreWayList != null) { - for (MarkerExploreWay markerExploreWay : exploreWayList) { - if (!markerExploreWay.getCanLive()) { - MarkerLocation markerLocation = markerExploreWay.getLocation(); - - MarkerShowEntity markerShowEntity = new MarkerShowEntity(); - markerShowEntity.setBindObj(markerExploreWay); - markerShowEntity.setMarkerLocation(markerLocation); - markerShowEntity.setMarkerType(markerExploreWay.getType()); - markerShowEntity.setTextContent(markerExploreWay.getAddr()); - - drawMapMarker(markerShowEntity); - } - } - fillNumberTrackEventBody(array, 1, exploreWayList.size()); - } - - if (shareMusicList != null) { - for (MarkerShareMusic markerShareMusic : shareMusicList) { - MarkerLocation markerLocation = markerShareMusic.getLocation(); - - MarkerShowEntity markerShowEntity = new MarkerShowEntity(); - markerShowEntity.setBindObj(markerShareMusic); - markerShowEntity.setMarkerLocation(markerLocation); - markerShowEntity.setMarkerType(markerShareMusic.getType()); - markerShowEntity.setTextContent(markerShareMusic.getMediaName()); - markerShowEntity.setIconUrl(markerShareMusic.getMediaImg()); - - drawMapMarker(markerShowEntity); - } - fillNumberTrackEventBody(array, 4, shareMusicList.size()); - } - - if (noveltyInfoList != null) { - int num_gas_station = 0; - int num_traffic_check = 0; - int num_road_closed = 0; - int num_shop_discount = 0; - int num_fours_shop = 0; - - for (MarkerNoveltyInfo noveltyInfo : noveltyInfoList) { - MarkerLocation markerLocation = noveltyInfo.getLocation(); - - MarkerShowEntity markerShowEntity = new MarkerShowEntity(); - markerShowEntity.setBindObj(noveltyInfo); - markerShowEntity.setMarkerLocation(markerLocation); - markerShowEntity.setMarkerType(noveltyInfo.getType()); - markerShowEntity.setTextContent(noveltyInfo.getLocation().getAddress()); - - drawMapMarker(markerShowEntity); - - switch (noveltyInfo.getPoiType()) { - case MarkerPoiTypeEnum.GAS_STATION: - num_gas_station++; - break; - case MarkerPoiTypeEnum.TRAFFIC_CHECK: - num_traffic_check++; - break; - case MarkerPoiTypeEnum.ROAD_CLOSED: - num_road_closed++; - break; - case MarkerPoiTypeEnum.SHOP_DISCOUNT: - num_shop_discount++; - break; - case MarkerPoiTypeEnum.FOURS_4S: - num_fours_shop++; - break; - } - } - fillNumberTrackEventBody(array, 2, num_gas_station); - fillNumberTrackEventBody(array, 6, num_road_closed); - fillNumberTrackEventBody(array, 5, num_traffic_check); - fillNumberTrackEventBody(array, 7, num_shop_discount); - fillNumberTrackEventBody(array, 8, num_fours_shop); - } - analyticData(array); - + drawMarkerByCurrentType( mLastDataResult ); // 同步新绘制的气泡状态 alreadySmallMarker.clear(); - highlightedMarker(mLastHighLightModule, true); +// highlightedMarker( mCurrentModuleName, true ); - try { - // 在ACC on 之后第一次获取到了在线车辆数据,选中最近的一个Marker - if (isCheckOnLineData) { - if (mNearlyMogoMarker != null) { - Logger.d(TAG, "语音搜索触发,默认选中最近的在线车辆:" + mNearlyMogoMarker); - // 移动地图到指定位置 - MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus(ServiceConst.TYPE, true, false); - MarkerServiceHandler.getMapUIController().moveToCenter(mNearlyMogoMarker.getPosition()); - onMarkerClicked(mNearlyMogoMarker); - MogoMarkersHandler.getInstance().onMarkerClicked(mNearlyMogoMarker); - isCheckOnLineData = false; - } - } - - if (isACC_ON && isSynchronousOnLineData) { - isSynchronousOnLineData = false; - if (mNearlyMogoMarker != null) { - Logger.d(TAG, "ACC ON 触发,将附近的在线车辆数据同步给卡片:" + mNearlyMogoMarker); - openMarker(mNearlyMogoMarker); - // 将数据同步给在线用户卡片 - MogoDataHandler.getInstance().invoke(ServiceConst.CARD_TYPE_USER_DATA, mNearlyMogoMarker); - } - } - } catch (Exception e) { - e.printStackTrace(); - } + trackData( mLastDataResult ); } } + /** + * 是否是语音搜索的在线车辆数据:目前根据返回数据判断 + * + * @param markerCardResult + * @return + */ + private boolean isOnlineCarDataOnly( MarkerCardResult markerCardResult ) { + if ( markerCardResult != null && + markerCardResult.getDataType() != null && + markerCardResult.getDataType().size() == 1 && + markerCardResult.getDataType().contains( ServiceConst.CARD_TYPE_USER_DATA ) ) { + return true; + } + return false; + } /** - * 统计埋点 + * 根据类型绘制 + * + * @param markerCardResult */ - private synchronized static void fillNumberTrackEventBody(JSONArray arr, int type, int size) { - JSONObject object = new JSONObject(); - try { - object.put("type", type); - object.put("num", size); - if (arr != null) { - arr.put(object); + private synchronized void drawMarkerByCurrentType( MarkerCardResult markerCardResult ) { + + if ( markerCardResult == null ) { + return; + } + + if ( TextUtils.isEmpty( mCurrentModuleName ) ) { + // 默认大而全 + mCurrentModuleName = ServiceConst.CARD_TYPE_BUSINESS_OPERATION; + } + + List< MarkerOnlineCar > onlineCarList = markerCardResult.getOnlineCar(); + List< MarkerExploreWay > exploreWayList = markerCardResult.getExploreWay(); + List< MarkerShareMusic > shareMusicList = markerCardResult.getShareMusic(); + List< MarkerNoveltyInfo > noveltyInfoList = markerCardResult.getNoveltyInfo(); + + switch ( mCurrentModuleName ) { + case ServiceConst.CARD_TYPE_BUSINESS_OPERATION: + drawAllMarker( markerCardResult ); + break; + case ServiceConst.CARD_TYPE_NOVELTY: + drawNoveltyMarker( noveltyInfoList ); + break; + case ServiceConst.CARD_TYPE_CARS_CHATTING: + case ServiceConst.CARD_TYPE_USER_DATA: + drawOnlineCarMarkers( onlineCarList ); + break; + case ServiceConst.CARD_TYPE_ROAD_CONDITION: + drawRoadConditionMarker( exploreWayList ); + break; + case ServiceConst.CARD_TYPE_SHARE_MUSIC: + drawShareMusicMarker( shareMusicList ); + break; + } + } + + /** + * 绘制所有数据 + * + * @param markerCardResult + */ + private void drawAllMarker( MarkerCardResult markerCardResult ) { + List< MarkerOnlineCar > onlineCarList = markerCardResult.getOnlineCar(); + List< MarkerExploreWay > exploreWayList = markerCardResult.getExploreWay(); + List< MarkerShareMusic > shareMusicList = markerCardResult.getShareMusic(); + List< MarkerNoveltyInfo > noveltyInfoList = markerCardResult.getNoveltyInfo(); + + drawOnlineCarMarkers( onlineCarList ); + drawRoadConditionMarker( exploreWayList ); + drawShareMusicMarker( shareMusicList ); + drawNoveltyMarker( noveltyInfoList ); + } + + /** + * 绘制在线车辆marker + * + * @param onlineCarList + */ + private void drawOnlineCarMarkers( List< MarkerOnlineCar > onlineCarList ) { + if ( onlineCarList == null || onlineCarList.isEmpty() ) { + return; + } + double nearlyDistance = Float.MAX_VALUE; + for ( MarkerOnlineCar markerOnlineCar : onlineCarList ) { + MarkerLocation markerLocation = markerOnlineCar.getLocation(); + + MarkerShowEntity markerShowEntity = new MarkerShowEntity(); + markerShowEntity.setBindObj( markerOnlineCar ); + markerShowEntity.setMarkerLocation( markerLocation ); + markerShowEntity.setMarkerType( markerOnlineCar.getType() ); + markerShowEntity.setTextContent( markerOnlineCar.getUserInfo().getUserName() ); + markerShowEntity.setIconUrl( markerOnlineCar.getUserInfo().getUserHead() ); + + IMogoMarker iMogoMarker = drawMapMarker( markerShowEntity ); + // 计算在线车辆距离当前车辆的距离,每次都与最后一次距离最近的进行比较,保留距离最近的车辆,进行卡片展示 + try { + // 当前车辆的位置 + MogoLocation currentLocation = MarkerServiceHandler.getMogoLocationClient().getLastKnowLocation(); + + // 计算车辆距离指定气泡的距离 + float calculateDistance = Utils.calculateLineDistance( + new MogoLatLng( markerLocation.getLat(), markerLocation.getLon() ), + new MogoLatLng( currentLocation.getLatitude(), currentLocation.getLongitude() ) + ); + + // 进行比较,保留最近的一个数据 + if ( calculateDistance < nearlyDistance ) { + nearlyDistance = calculateDistance; + mNearlyMarker = iMogoMarker; + } + + } catch ( Exception e ) { + e.printStackTrace(); } - } catch (JSONException e) { + } + Logger.d( TAG, "距离当前车辆位置最近的距离为:" + nearlyDistance ); + + try { + // 在ACC on 之后第一次获取到了在线车辆数据,选中最近的一个Marker + if ( mIsAISearchOnlineData ) { + if ( mNearlyMarker != null ) { + Logger.d( TAG, "语音搜索触发,默认选中最近的在线车辆:" + mNearlyMarker ); + // 移动地图到指定位置 + MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( ServiceConst.TYPE, true, false ); + MarkerServiceHandler.getMapUIController().moveToCenter( mNearlyMarker.getPosition() ); + onMarkerClicked( mNearlyMarker ); + MogoMarkersHandler.getInstance().onMarkerClicked( mNearlyMarker ); + mIsAISearchOnlineData = false; + } + } + + if ( mIsAccOn && isSynchronousOnLineData ) { + isSynchronousOnLineData = false; + if ( mNearlyMarker != null ) { + Logger.d( TAG, "ACC ON 触发,将附近的在线车辆数据同步给卡片:" + mNearlyMarker ); + openMarker( mNearlyMarker ); + // 将数据同步给在线用户卡片 + MogoDataHandler.getInstance().invoke( ServiceConst.CARD_TYPE_USER_DATA, mNearlyMarker ); + } + } + } catch ( Exception e ) { e.printStackTrace(); } } + /** + * 探路数据 + * + * @param exploreWayList + */ + private void drawRoadConditionMarker( List< MarkerExploreWay > exploreWayList ) { + // 将数据同步给探路,避免探路每次 perform 的时候去拉取,造成消耗 + MogoDataHandler.getInstance().invoke( ServiceConst.CARD_TYPE_ROAD_CONDITION, exploreWayList ); + if ( exploreWayList == null || exploreWayList.isEmpty() ) { + return; + } + for ( MarkerExploreWay markerExploreWay : exploreWayList ) { + if ( !markerExploreWay.getCanLive() ) { + MarkerLocation markerLocation = markerExploreWay.getLocation(); + + MarkerShowEntity markerShowEntity = new MarkerShowEntity(); + markerShowEntity.setBindObj( markerExploreWay ); + markerShowEntity.setMarkerLocation( markerLocation ); + markerShowEntity.setMarkerType( markerExploreWay.getType() ); + markerShowEntity.setTextContent( markerExploreWay.getAddr() ); + + drawMapMarker( markerShowEntity ); + } + } + } + + /** + * 共享音乐 + * + * @param shareMusicList + */ + private void drawShareMusicMarker( List< MarkerShareMusic > shareMusicList ) { + if ( shareMusicList == null ) { + return; + } + for ( MarkerShareMusic markerShareMusic : shareMusicList ) { + MarkerLocation markerLocation = markerShareMusic.getLocation(); + + MarkerShowEntity markerShowEntity = new MarkerShowEntity(); + markerShowEntity.setBindObj( markerShareMusic ); + markerShowEntity.setMarkerLocation( markerLocation ); + markerShowEntity.setMarkerType( markerShareMusic.getType() ); + markerShowEntity.setTextContent( markerShareMusic.getMediaName() ); + markerShowEntity.setIconUrl( markerShareMusic.getMediaImg() ); + + drawMapMarker( markerShowEntity ); + } + } + + /** + * 新鲜事 + * + * @param noveltyInfoList + */ + private void drawNoveltyMarker( List< MarkerNoveltyInfo > noveltyInfoList ) { + if ( noveltyInfoList == null ) { + return; + } + for ( MarkerNoveltyInfo noveltyInfo : noveltyInfoList ) { + MarkerLocation markerLocation = noveltyInfo.getLocation(); + MarkerShowEntity markerShowEntity = new MarkerShowEntity(); + markerShowEntity.setBindObj( noveltyInfo ); + markerShowEntity.setMarkerLocation( markerLocation ); + markerShowEntity.setMarkerType( noveltyInfo.getType() ); + markerShowEntity.setTextContent( noveltyInfo.getLocation().getAddress() ); + drawMapMarker( markerShowEntity ); + } + } + + /** * 统计地图内数据获取 * - * @param array 埋点数据 + * @param markerCardResult */ - private synchronized static void analyticData(JSONArray array) { + private void trackData( MarkerCardResult markerCardResult ) { + if ( markerCardResult == null ) { + return; + } + JSONArray array = new JSONArray(); + List< MarkerOnlineCar > onlineCarList = markerCardResult.getOnlineCar(); + List< MarkerExploreWay > exploreWayList = markerCardResult.getExploreWay(); + List< MarkerShareMusic > shareMusicList = markerCardResult.getShareMusic(); + List< MarkerNoveltyInfo > noveltyInfoList = markerCardResult.getNoveltyInfo(); + + fillNumberTrackEventBody( array, 3, onlineCarList.size() ); + fillNumberTrackEventBody( array, 1, exploreWayList.size() ); + fillNumberTrackEventBody( array, 4, shareMusicList.size() ); + + int num_gas_station = 0; + int num_traffic_check = 0; + int num_road_closed = 0; + int num_shop_discount = 0; + int num_fours_shop = 0; + + for ( MarkerNoveltyInfo markerNoveltyInfo : noveltyInfoList ) { + if ( markerNoveltyInfo == null ) { + continue; + } + switch ( markerNoveltyInfo.getPoiType() ) { + case MarkerPoiTypeEnum.GAS_STATION: + num_gas_station++; + break; + case MarkerPoiTypeEnum.TRAFFIC_CHECK: + num_traffic_check++; + break; + case MarkerPoiTypeEnum.ROAD_CLOSED: + num_road_closed++; + break; + case MarkerPoiTypeEnum.SHOP_DISCOUNT: + num_shop_discount++; + break; + case MarkerPoiTypeEnum.FOURS_4S: + num_fours_shop++; + break; + } + } + fillNumberTrackEventBody( array, 2, num_gas_station ); + fillNumberTrackEventBody( array, 6, num_road_closed ); + fillNumberTrackEventBody( array, 5, num_traffic_check ); + fillNumberTrackEventBody( array, 7, num_shop_discount ); + fillNumberTrackEventBody( array, 8, num_fours_shop ); + try { - if (array == null || array.length() == 0) { + if ( array.length() == 0 ) { return; } - final Map properties = new HashMap<>(); - properties.put("data", array.toString()); - MarkerServiceHandler.getMogoAnalytics().track("Launcher_Data_Get", properties); - } catch (Exception e) { + final Map< String, Object > properties = new HashMap<>(); + properties.put( "data", array.toString() ); + MarkerServiceHandler.getMogoAnalytics().track( "Launcher_Data_Get", properties ); + } catch ( Exception e ) { + e.printStackTrace(); + } + } + + /** + * 统计埋点 + */ + private synchronized static void fillNumberTrackEventBody( JSONArray arr, int type, int size ) { + JSONObject object = new JSONObject(); + try { + object.put( "type", type ); + object.put( "num", size ); + if ( arr != null ) { + arr.put( object ); + } + } catch ( JSONException e ) { e.printStackTrace(); } } @@ -533,44 +648,44 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag * @param markerShowEntity marker 绘制数据实体 * @return 绘制的Marker */ - public synchronized IMogoMarker drawMapMarker(MarkerShowEntity markerShowEntity) { - if (!TextUtils.isEmpty(mLastHighLightModule) - && mLastCheckMarker != null - && !TextUtils.isEmpty(mLastCheckMarker.getOwner()) - && TextUtils.equals(mLastHighLightModule, mLastCheckMarker.getOwner()) - ) { - return drawMapMarker(markerShowEntity, true); - } else { - return drawMapMarker(markerShowEntity, false); - } + public synchronized IMogoMarker drawMapMarker( MarkerShowEntity markerShowEntity ) { + return drawMapMarker( markerShowEntity, isSmallType() ); } - private synchronized IMogoMarker drawMapMarker(MarkerShowEntity markerShowEntity, boolean isSmall) { + private boolean isSmallType() { + return !TextUtils.isEmpty( mCurrentModuleName ) + && mLastCheckMarker != null + && !mLastCheckMarker.isDestroyed() + && TextUtils.equals( mCurrentModuleName, mLastCheckMarker.getOwner() ); + } + + private IMogoMarker drawMapMarker( MarkerShowEntity markerShowEntity, boolean isSmall ) { //Logger.i(TAG, "绘制Marker====drawMapMarker:" + markerShowEntity); try { - if (markerShowEntity.getMarkerLocation() != null) { + if ( markerShowEntity.getMarkerLocation() != null ) { MogoMarkerOptions options = new MogoMarkerOptions() - .owner(markerShowEntity.getMarkerType()) - .object(markerShowEntity) - .latitude(markerShowEntity.getMarkerLocation().getLat()) - .longitude(markerShowEntity.getMarkerLocation().getLon()); - IMarkerView markerView = MapMarkerAdapter.getMarkerView(mContext, markerShowEntity, options); - options.icon(markerView.getView()); + .owner( markerShowEntity.getMarkerType() ) + .object( markerShowEntity ) + .latitude( markerShowEntity.getMarkerLocation().getLat() ) + .longitude( markerShowEntity.getMarkerLocation().getLon() ); + IMarkerView markerView = MapMarkerAdapter.getMarkerView( mContext, markerShowEntity, options ); + options.icon( markerView.getView() ); - IMogoMarker marker = MarkerServiceHandler.getMarkerManager().addMarker(markerShowEntity.getMarkerType(), options); - markerView.setMarker(marker); - marker.setOnMarkerClickListener(this); + IMogoMarker marker = MarkerServiceHandler.getMarkerManager().addMarker( markerShowEntity.getMarkerType(), options ); + marker.setOwner( markerShowEntity.getMarkerType() ); + markerView.setMarker( marker ); + marker.setOnMarkerClickListener( this ); - if (isSmall) { - List markers = new ArrayList<>(); - markers.add(marker); - setMarkersSmall(markers); + if ( isSmall ) { + List< IMogoMarker > markers = new ArrayList<>(); + markers.add( marker ); + setMarkersSmall( markers ); } return marker; } else { - Logger.e(TAG, "Location 必须进行初始化!!!!!"); + Logger.e( TAG, "Location 必须进行初始化!!!!!" ); } - } catch (Exception e) { + } catch ( Exception e ) { e.printStackTrace(); } return null; @@ -578,23 +693,29 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag @Override - public Class target() { + public Class< MarkerResponse > target() { return MarkerResponse.class; } @Override - public void onMsgReceived(final MarkerResponse response) { - Logger.d(TAG, "接收到了地图大而全数据"); - if (!MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() - && isACC_ON - && !MarkerServiceHandler.getMogoStatusManager().isV2XShow()) { - Handler handler = new Handler(Looper.getMainLooper()); - handler.post(new Runnable() { - @Override - public void run() { - drawMapMarker(response); - } + public void onMsgReceived( final MarkerResponse response ) { + if ( !ignoreDrawRequest() ) { + Logger.d( TAG, "接收到了地图大而全数据" ); + runOnTargetThread( () -> { + drawMapMarker( response ); } ); } } + + private boolean ignoreDrawRequest() { + return MarkerServiceHandler.getMogoStatusManager().isSearchUIShow() + || MarkerServiceHandler.getMogoStatusManager().isV2XShow(); + } + + private void runOnTargetThread( Runnable runnable ) { + if ( runnable == null ) { + return; + } + ThreadPoolService.execute( runnable ); + } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/refresh/AutoRefreshStrategy.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/refresh/AutoRefreshStrategy.java index d620f20586..47d96799f4 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/refresh/AutoRefreshStrategy.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/refresh/AutoRefreshStrategy.java @@ -21,9 +21,9 @@ public class AutoRefreshStrategy { private long interval = 3 * ONE_MINUTE; /** - * 用户打断后的延时(s) + * 用户打断后的延时(s)【2.0.2后不再延时】 */ - private long interruptInterval = 1 * ONE_MINUTE; + private long interruptInterval = 0 * ONE_MINUTE; /** * 距离(米) 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 index c5f43a8e08..1983c7fe4e 100644 --- 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 @@ -3,6 +3,7 @@ package com.mogo.service; import android.content.Context; import com.alibaba.android.arouter.facade.template.IProvider; +import com.mogo.service.adas.IMogoADASController; import com.mogo.service.analytics.IMogoAnalytics; import com.mogo.service.cardmanager.IMogoCardManager; import com.mogo.service.connection.IMogoSocketManager; @@ -103,7 +104,7 @@ public interface IMogoServiceApis extends IProvider { * * @return */ - IMogoSettingManager getSettingManager(); + IMogoSettingManager getSettingManagerApi(); /** * 网络接口api @@ -129,5 +130,12 @@ public interface IMogoServiceApis extends IProvider { * * @return */ - IMogoWindowManager getWindowManager(); + IMogoWindowManager getWindowManagerApi(); + + /** + * 辅助驾驶控制接口 + * + * @return + */ + IMogoADASController getAdasControllerApi(); } 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 7d1bee9a1e..e200c4401a 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 @@ -132,6 +132,12 @@ public class MogoServicePaths { @Deprecated public static final String PATH_DATA_MANAGER = "/datamanager/api"; + /** + * adas 控制 + */ + @Deprecated + public static final String PATH_ADAS_CONTROLLER = "/adascontroller/api"; + /** * 接口集合 */ diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java new file mode 100644 index 0000000000..5a6f90560d --- /dev/null +++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java @@ -0,0 +1,23 @@ +package com.mogo.service.adas; + +import com.alibaba.android.arouter.facade.template.IProvider; + +/** + * @author congtaowang + * @since 2020-03-10 + *

+ * v2x 页面控制 + */ +public interface IMogoADASController extends IProvider { + + /** + * 打开adas + */ + void openADAS(); + + /** + * 关闭adas + */ + void closeADAS(); + +} diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/cardmanager/IMogoCardManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/cardmanager/IMogoCardManager.java index 30c0ed5f17..7fa7b4eced 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/cardmanager/IMogoCardManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/cardmanager/IMogoCardManager.java @@ -17,6 +17,14 @@ public interface IMogoCardManager extends IProvider { */ void switch2( String cardType ); + /** + * 切换卡片 + * + * @param cardType 卡片类型 + * @param lockCar 是否锁车[将视图拉回车位] + */ + void switch2( String cardType, boolean lockCar ); + /** * 注册卡片切换监听 */ diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/datamanager/IMogoDataChangedListener.java b/services/mogo-service-api/src/main/java/com/mogo/service/datamanager/IMogoDataChangedListener.java index 2e2d76ff12..74ab4be6ee 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/datamanager/IMogoDataChangedListener.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/datamanager/IMogoDataChangedListener.java @@ -1,7 +1,5 @@ package com.mogo.service.datamanager; -import java.util.List; - /** * @author congtaowang * @since 2020-02-11 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 index 3297ec44fd..78df9b1960 100644 --- 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 @@ -8,6 +8,7 @@ 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.adas.IMogoADASController; import com.mogo.service.analytics.IMogoAnalytics; import com.mogo.service.cardmanager.IMogoCardManager; import com.mogo.service.connection.IMogoSocketManager; @@ -114,15 +115,20 @@ public class MogoServiceApis implements IMogoServiceApis { } @Override - public IMogoSettingManager getSettingManager() { + public IMogoSettingManager getSettingManagerApi() { return getApiInstance( IMogoSettingManager.class, MogoServicePaths.PATH_SETTING_MANAGER ); } @Override - public IMogoWindowManager getWindowManager() { + public IMogoWindowManager getWindowManagerApi() { return getApiInstance( IMogoWindowManager.class, MogoServicePaths.PATH_WINDOW_MANAGER ); } + @Override + public IMogoADASController getAdasControllerApi() { + return getApiInstance( IMogoADASController.class, MogoServicePaths.PATH_ADAS_CONTROLLER ); + } + private static < T extends IProvider > T getApiInstance( Class< T > clazz, String path ) { T inst = SingletonsHolder.get( clazz ); if ( inst == null ) { diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java new file mode 100644 index 0000000000..a988dc8a80 --- /dev/null +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java @@ -0,0 +1,79 @@ +package com.mogo.service.impl.adas; + +import android.app.Application; +import android.content.Context; +import android.content.Intent; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.commons.AbsMogoApplication; +import com.mogo.service.MogoServicePaths; +import com.mogo.service.adas.IMogoADASController; +import com.mogo.utils.logger.Logger; + +import org.json.JSONObject; + +/** + * @author congtaowang + * @since 2020-03-10 + *

+ * 描述 + */ +@Route( path = MogoServicePaths.PATH_ADAS_CONTROLLER ) +public class MogoADASController implements IMogoADASController { + + private static final String TAG = "MogoADASController"; + + public static final String ACTION = "com.zhidao.speech.awake.notify"; + public static final String PARAM_COMMAND = "command"; + public static final String VAL_COMMAND = "system.application.operation"; + public static final String PARAM_DATA = "data"; + public static final String PARAM_OBJECT = "object"; + public static final String VAL_OBJECT = "辅助驾驶"; + public static final String PARAM_OPERATION = "operation"; + public static final String VAL_OPEN = "打开"; + public static final String VAL_CLOSE = "关闭"; + + @Override + public void openADAS() { + Intent intent = new Intent( ACTION ); + intent.putExtra( PARAM_COMMAND, VAL_COMMAND ); + JSONObject object = new JSONObject(); + try { + object.put( PARAM_OBJECT, VAL_OBJECT ); + object.put( PARAM_OPERATION, VAL_OPEN ); + intent.putExtra( PARAM_DATA, object.toString() ); + sendBroadcast( intent ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } + + @Override + public void closeADAS() { + Intent intent = new Intent( ACTION ); + intent.putExtra( PARAM_COMMAND, VAL_COMMAND ); + JSONObject object = new JSONObject(); + try { + object.put( PARAM_OBJECT, VAL_OBJECT ); + object.put( PARAM_OPERATION, VAL_CLOSE ); + intent.putExtra( PARAM_DATA, object.toString() ); + sendBroadcast( intent ); + } catch ( Exception e ) { + Logger.e( TAG, e, "error." ); + } + } + + private void sendBroadcast( Intent intent ) { + Application app = AbsMogoApplication.getApp(); + if ( app == null ) { + Logger.e( TAG, "un handle Application instance." ); + return; + } + app.sendBroadcast( intent ); + } + + @Override + public void init( Context context ) { + + } +}