From 57d7c9ce070bf650bb718ec5fe619394c78f345c Mon Sep 17 00:00:00 2001 From: donghongyu Date: Wed, 19 Jan 2022 19:48:33 +0800 Subject: [PATCH] =?UTF-8?q?[Upload]=20=E6=81=A2=E5=A4=8D=E8=AF=AF=E5=88=A0?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: donghongyu --- .../com/mogo/module/service/MogoServices.java | 78 ++++++++++++++++++- .../service/network/RefreshApiService.java | 8 +- 2 files changed, 80 insertions(+), 6 deletions(-) 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 f739677ca0..900f65db8e 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 @@ -139,6 +139,8 @@ public class MogoServices implements IMogoMapListener, private float mLastZoomLevel = 0; private TtsConfigModleData mTtsModle; private long mRefreshRemainingTime = Long.MAX_VALUE; + // 上次手动操作的中心点坐标 + private MogoLatLng mLastCustomRefreshCenterLocation; private IMogoMapService mMogoMapService; private IMogoStatusManager mStatusManager; @@ -326,6 +328,9 @@ public class MogoServices implements IMogoMapListener, } public void init( Context context ) { + + initWorkThread(); + registerMogoReceiver( context ); registerInternalUnWakeupWords(); @@ -372,6 +377,36 @@ public class MogoServices implements IMogoMapListener, TimeDelayUploadManager.getInstance().init(context); } + private void initWorkThread() { + mThreadHandler = new RefreshWorkThreadHandler( WorkThreadHandler.getInstance().getLooper() ) { + @Override + protected void handleMapChangedMessage( Message msg ) { + if ( msg.obj instanceof RefreshObject ) { + RefreshObject ro = ( ( RefreshObject ) msg.obj ); + if ( invokeRefreshWhenTranslationByUser( ro.mLonLat ) ) { + notifyRefreshData( ro.mLonLat, ro.mRadius, ro.mCallback ); + mLastCustomRefreshCenterLocation = ro.mLonLat; + } + } + } + + @Override + protected void handleRequestDataMessage( Message msg ) { + if ( msg.obj instanceof RefreshObject ) { + RefreshObject ro = ( ( RefreshObject ) msg.obj ); + if ( ro.mLonLat == null ) { + invokeAutoRefreshStrategy(); + Logger.w( TAG, "lonLat is null." ); + return; + } + //请求大而全数据,刷新地图POI + mRefreshModel.refreshExplorerWayData( ro.mLonLat, ro.mRadius, ro.mAmount, ro.mCallback ); + Logger.i( TAG, "刷新半径 = %s, 点 = %s, zoomLevel = %s, amount = %s", ro.mRadius, ro.mLonLat, mLastZoomLevel, ro.mAmount ); + } + } + }; + } + private void registerMogoReceiver( Context context ) { if ( context == null ) { return; @@ -495,6 +530,7 @@ public class MogoServices implements IMogoMapListener, if ( mIsCameraInited ) { mLastZoomLevel = zoom; + mLastCustomRefreshCenterLocation = latLng; mIsCameraInited = false; initMapStatus(); return; @@ -503,18 +539,21 @@ public class MogoServices implements IMogoMapListener, // 部分非用户操作导致地图视图变化:绘线、圈点等不触发用户刷新 // 消费状态 if ( mStatusManager.isUserInteracted() ) { + mLastCustomRefreshCenterLocation = latLng; mLastZoomLevel = zoom; return; } // v2x // adas 状态下不做任何操作 if ( mStatusManager.isV2XShow() ) { + mLastCustomRefreshCenterLocation = latLng; mLastZoomLevel = zoom; return; } // 搜索页面显示时不做任何策略 if ( mStatusManager.isSearchUIShow() ) { + mLastCustomRefreshCenterLocation = latLng; mLastZoomLevel = zoom; return; } @@ -523,6 +562,7 @@ public class MogoServices implements IMogoMapListener, if ( mLastZoomLevel - zoom > mCustomRefreshStrategy.getZoomOutLevel() ) { // 缩放级别缩小 notifyRefreshData( latLng, getQueryRadius(), mCustomRefreshCallback ); + mLastCustomRefreshCenterLocation = latLng; mLastZoomLevel = zoom; } else if ( mLastZoomLevel - zoom < 0 ) { mLastZoomLevel = zoom; @@ -547,6 +587,28 @@ public class MogoServices implements IMogoMapListener, return Math.max(radius, 1000); } + /** + * 平移地图刷新策略 + */ + private boolean invokeRefreshWhenTranslationByUser( MogoLatLng latLng ) { + try { + float factor; + if ( mIsVertical ) { + factor = getMapCameraFactWidth(); + } else { + factor = getMapCameraFactHeight(); + } + if ( factor == 0.0f ) { + return false; + } + float distance = Utils.calculateLineDistance( latLng, mLastCustomRefreshCenterLocation ); + return distance > ( factor / 2 ); + } catch ( Exception e ) { + Logger.e( TAG, e, "warming. " ); + return false; + } + } + @Override public void onLocationChanged( MogoLocation location ) { @@ -822,8 +884,20 @@ public class MogoServices implements IMogoMapListener, MoGoAiCloudRealTime.stopRealTime(); } + public Location getLastCarLocation() { + return mLastCarLocation; + } + private boolean mLastStatusIsVr = false; + public boolean isLastStatusIsVr() { + return mLastStatusIsVr; + } + + public void setLastStatusIsVr(boolean lastStatusIsVr) { + this.mLastStatusIsVr = lastStatusIsVr; + } + @Override public void onMapModeChanged( EnumMapUI ui ) { Log.i(TAG, "onMapModeChanged:" + ui + " mLastStatusIsVr:" + mLastStatusIsVr); @@ -834,7 +908,7 @@ public class MogoServices implements IMogoMapListener, MapCenterPointStrategy.resetByChangeMode(); MapMarkerManager.getInstance().redrawMarkerByStyleChanged(); if (DebugConfig.getCarMachineType() != DebugConfig.CAR_MACHINE_TYPE_LENOVO ) { - AIAssist.getInstance( mContext ).speakTTSVoice( "已开启鹰眼模式" ); + AIAssist.getInstance( mContext ).speakTTSVoice( "已开启鹰眼模式" ); } mLastStatusIsVr = true; } @@ -845,7 +919,7 @@ public class MogoServices implements IMogoMapListener, MapCenterPointStrategy.resetByChangeMode(); MapMarkerManager.getInstance().redrawMarkerByStyleChanged(); if (DebugConfig.getCarMachineType() != DebugConfig.CAR_MACHINE_TYPE_LENOVO ) { - AIAssist.getInstance( mContext ).speakTTSVoice( "已退出鹰眼模式" ); + AIAssist.getInstance( mContext ).speakTTSVoice( "已退出鹰眼模式" ); } } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshApiService.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshApiService.java index 479a5fcb9e..eca03ba6ec 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshApiService.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshApiService.java @@ -26,16 +26,16 @@ public interface RefreshApiService { @POST( "/yycp-launcherSnapshot/launcherSnapshot/querySnapshotAsync" ) Observable< BaseData > refreshData( @FieldMap Map< String, Object > parameters ); - /* + /** * 大而全 - * */ + */ @FormUrlEncoded @POST( "/yycp-launcherSnapshot/launcherSnapshot/querySnapshotSync" ) Observable< MarkerResponse > refreshDataSync( @FieldMap Map< String, Object > parameters ); - /* + /** * 周边在线车辆 - * */ + */ @FormUrlEncoded @POST( "/yycp-launcherSnapshot/user/queryOnLineCarWithRoute" ) Observable< MarkerResponse > queryOnLineCarWithRoute( @FieldMap Map< String, Object > parameters );