From 61738bcf68359e5da4539f105b75df11ee2e350a Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Tue, 9 Jun 2020 14:36:09 +0800 Subject: [PATCH] opt --- app/build.gradle | 2 +- .../com/mogo/launcher/MogoApplication.java | 2 +- .../com/mogo/commons/AbsMogoApplication.java | 3 + .../java/com/mogo/commons/device/Devices.java | 8 +- .../java/com/mogo}/utils/LaunchUtils.java | 2 +- .../module/apps/AppNavigatorFragment.java | 7 +- .../module/apps/AppNavigatorPresenter.java | 6 +- .../mogo/module/apps/AppsListPresenter.java | 2 - .../module/apps/applaunch/AppLauncher.java | 2 +- .../mogo/module/apps/utils/LaunchUtils.java | 32 ------- .../apps/view/OnAiAssistClickListener.java | 68 ++++++++++++++ .../module/extensions/ExtensionsFragment.java | 2 +- .../module/extensions/utils/LaunchUtils.java | 29 ------ .../com/mogo/module/media/MediaWindow2.java | 4 +- .../com/mogo/module/service/MogoServices.java | 9 +- .../intent/OnlineCarSearchIntentHandler.java | 29 ++++-- .../service/marker/MapMarkerManager.java | 90 +++++++++++++++---- .../src/main/res/values-xhdpi/dimens.xml | 6 ++ .../src/main/res/values/dimens.xml | 5 ++ 19 files changed, 194 insertions(+), 114 deletions(-) rename {modules/mogo-module-media/src/main/java/com/mogo/module/media => foudations/mogo-utils/src/main/java/com/mogo}/utils/LaunchUtils.java (94%) delete mode 100644 modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/LaunchUtils.java create mode 100644 modules/mogo-module-apps/src/main/java/com/mogo/module/apps/view/OnAiAssistClickListener.java delete mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/LaunchUtils.java diff --git a/app/build.gradle b/app/build.gradle index d8ebdb280d..3514a787b4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -82,7 +82,7 @@ android { // launcher app launcher{ dimension "basic" - applicationId rootProject.ext.android.zhidadoApplicationId + applicationId rootProject.ext.android.applicationId // 是否启动位置服务 buildConfigField 'boolean', 'LAUNCH_LOCATION_SERVICE', 'true' // 是否使用自定义导航 diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 5ea39f1189..c88ff41e69 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -69,7 +69,7 @@ public class MogoApplication extends AbsMogoApplication { super.init(); IMogoSocketManager mMogoSocketManager = ARouter.getInstance().navigation( IMogoSocketManager.class ); if ( mMogoSocketManager != null ) { - mMogoSocketManager.init(getApplicationContext(), BuildConfig.APPLICATION_ID); + mMogoSocketManager.init(getApplicationContext(), "com.mogo.launcher"); } else { Logger.e( TAG, "init socket server error." ); } diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java index 77457a07ae..b0711f000d 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java @@ -12,6 +12,7 @@ import com.alibaba.android.arouter.launcher.ARouter; import com.elegant.analytics.Analytics; import com.elegant.analytics.AnalyticsConfig; import com.mogo.commons.debug.DebugConfig; +import com.mogo.commons.device.Devices; import com.mogo.commons.network.AllAllowedHostnameVerifier; import com.mogo.commons.network.Constants; import com.mogo.commons.network.ParamsUtil; @@ -106,6 +107,8 @@ public class AbsMogoApplication extends Application { // 2 - 本地缓存,聚合上报,积累30条埋点上报,或者积累60秒上报一次。 AnalyticsConfig.getInstance( sApp ).setMode( DebugConfig.isDebug() ? 2 : 2 ); AnalyticsConfig.getInstance( sApp ).shouldLog( DebugConfig.isDebug() ); + + Devices.checkBindState(); } ); } diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/device/Devices.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/device/Devices.java index dcd4ca90e3..87a8aab2d2 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/device/Devices.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/device/Devices.java @@ -17,6 +17,8 @@ class Devices { public static final Uri CONTENT_URI_BIND = Uri.parse( "content://com.zhidao.guide.lock.product.bindstatus/status" ); + private static boolean sIsBind = false; + /** * 检测车机激活状态 * @@ -33,11 +35,15 @@ class Devices { return false; } int status = cursor.getInt( cursor.getColumnIndex( "lock_status" ) ); - return ( status == 1 ); + return sIsBind = ( status == 1 ); } } catch ( Exception e ) { e.printStackTrace(); } return false; } + + public static boolean isBind() { + return false; + } } diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/utils/LaunchUtils.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/LaunchUtils.java similarity index 94% rename from modules/mogo-module-media/src/main/java/com/mogo/module/media/utils/LaunchUtils.java rename to foudations/mogo-utils/src/main/java/com/mogo/utils/LaunchUtils.java index 653a77601e..6746d193e3 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/utils/LaunchUtils.java +++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/LaunchUtils.java @@ -1,4 +1,4 @@ -package com.mogo.module.media.utils; +package com.mogo.utils; import android.content.Context; import android.content.Intent; 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 a275d6545e..0df5e48b9e 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 @@ -9,6 +9,7 @@ import androidx.annotation.Nullable; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.mogo.commons.device.Devices; import com.mogo.commons.mvp.MvpFragment; import com.mogo.commons.voice.AIAssist; import com.mogo.module.apps.adapter.AppIndicatorAdapter; @@ -17,6 +18,7 @@ import com.mogo.module.apps.applaunch.AppLauncher; import com.mogo.module.apps.applaunch.BaseAppLauncher; import com.mogo.module.apps.applaunch.InternalFunctionLauncher; import com.mogo.module.apps.model.NavigatorApps; +import com.mogo.module.apps.view.OnAiAssistClickListener; import java.util.HashMap; import java.util.Map; @@ -63,10 +65,7 @@ public class AppNavigatorFragment extends MvpFragment< AppNavigatorView, AppNavi mAIAssistContainer = findViewById( R.id.module_apps_id_ai_assist_container ); mAIAssist = findViewById( R.id.module_apps_id_ai_assist ); mAnim.initAnim( mAIAssist ); - mAIAssist.setOnClickListener( view -> { - AIAssist.startAssistant( getContext() ); - trackNavigatorClickEvent( 5 ); - } ); + mAIAssist.setOnClickListener( new OnAiAssistClickListener() ); mAIAssistContainer.setOnClickListener( view -> { mAIAssist.performClick(); } ); 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 c42230cbca..7b39a6b5a3 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 @@ -5,18 +5,14 @@ import android.content.Intent; import androidx.annotation.NonNull; import androidx.lifecycle.LifecycleOwner; -import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.debug.DebugConfig; import com.mogo.commons.mvp.Presenter; import com.mogo.commons.voice.AIAssist; import com.mogo.commons.voice.IMogoVoiceCmdCallBack; import com.mogo.map.navi.IMogoNaviListener2; 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; -import com.mogo.service.intent.IMogoIntentManager; -import com.mogo.service.statusmanager.IMogoStatusManager; +import com.mogo.utils.LaunchUtils; import com.mogo.utils.TipToast; import org.json.JSONException; diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsListPresenter.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsListPresenter.java index 560156e4d2..caf44c1c72 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsListPresenter.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/AppsListPresenter.java @@ -10,11 +10,9 @@ import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.Presenter; import com.mogo.commons.voice.AIAssist; import com.mogo.commons.voice.IMogoVoiceCmdCallBack; -import com.mogo.module.apps.utils.LaunchUtils; import com.mogo.service.MogoServicePaths; import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.intent.IMogoIntentManager; -import com.mogo.utils.TipToast; import org.json.JSONException; import org.json.JSONObject; diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java index 83ed40c2d8..73c6989b9e 100644 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/applaunch/AppLauncher.java @@ -5,7 +5,7 @@ import android.content.Context; import com.mogo.module.apps.AppServiceHandler; import com.mogo.module.apps.R; import com.mogo.module.apps.model.AppInfo; -import com.mogo.module.apps.utils.LaunchUtils; +import com.mogo.utils.LaunchUtils; import com.mogo.utils.TipToast; import com.mogo.utils.logger.Logger; diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/LaunchUtils.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/LaunchUtils.java deleted file mode 100644 index 1e704842d2..0000000000 --- a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/utils/LaunchUtils.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.mogo.module.apps.utils; - -import android.content.Context; -import android.content.Intent; - -import com.mogo.module.apps.R; -import com.mogo.utils.TipToast; - -/** - * @author congtaowang - * @since 2020-02-03 - *

- * 描述 - */ -public class LaunchUtils { - - /** - * 通过包名启动app - * - * @param context - * @param pkg 包名 - */ - public static void launchByPkg( Context context, String pkg ) throws Exception { - Intent intent = getLaunchIntentForPackage( context, pkg ); - intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); - context.startActivity( intent ); - } - - public static Intent getLaunchIntentForPackage( Context context, String pkg ) { - return context.getPackageManager().getLaunchIntentForPackage( pkg ); - } -} diff --git a/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/view/OnAiAssistClickListener.java b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/view/OnAiAssistClickListener.java new file mode 100644 index 0000000000..7d73d05ea1 --- /dev/null +++ b/modules/mogo-module-apps/src/main/java/com/mogo/module/apps/view/OnAiAssistClickListener.java @@ -0,0 +1,68 @@ +package com.mogo.module.apps.view; + +import android.view.View; + +import com.mogo.commons.device.Devices; +import com.mogo.commons.voice.AIAssist; +import com.mogo.module.apps.AppServiceHandler; +import com.mogo.utils.TipToast; + +import java.util.HashMap; +import java.util.Map; + +public +/** + * @author congtaowang + * @since 2020/6/9 + * + * 如果已经激活设备,则按照正常流程打开语音,否则需要连续点击5下才能打开 + */ +class OnAiAssistClickListener implements View.OnClickListener { + + public static final int TOTAL_CLICK_AMOUNT = 5; + public static final int INTERVAL = 2_000 / TOTAL_CLICK_AMOUNT; + + private int mClickCounter = 0; + private long mLastClickTime = 0L; + + private boolean mDebugModeOpen = false; + + @Override + public void onClick( View v ) { + if ( Devices.isBind() ) { + AIAssist.startAssistant( v.getContext() ); + trackNavigatorClickEvent( 5 ); + } else { + if ( mDebugModeOpen ) { + AIAssist.startAssistant( v.getContext(), 2 ); + trackNavigatorClickEvent( 5 ); + return; + } + if ( mClickCounter == 0 ) { + mLastClickTime = System.currentTimeMillis(); + mClickCounter++; + } else { + if ( mClickCounter == TOTAL_CLICK_AMOUNT && !mDebugModeOpen ) { + AIAssist.startAssistant( v.getContext(), 2 ); + TipToast.shortTip( "开启语音调试" ); + mClickCounter = 0; + mLastClickTime = 0L; + mDebugModeOpen = true; + } else if ( System.currentTimeMillis() - mLastClickTime > INTERVAL ) { + mClickCounter = 0; + TipToast.shortTip( "请在2秒内打开调试模式" ); + } else { + mClickCounter++; + } + mLastClickTime = System.currentTimeMillis(); + } + } + } + + private void trackNavigatorClickEvent( int type ) { + final Map< String, Object > properties = new HashMap<>(); + properties.put( "type", type ); + AppServiceHandler.getMogoAnalytics().track( "Launcher_APP_Icon", properties ); + } + +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java index e5254a81c6..8ec5c22e84 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsFragment.java @@ -12,7 +12,7 @@ import androidx.annotation.Nullable; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.MvpFragment; import com.mogo.module.extensions.userinfo.UserInfo; -import com.mogo.module.extensions.utils.LaunchUtils; +import com.mogo.utils.LaunchUtils; import com.mogo.utils.glide.GlideApp; import com.mogo.utils.logger.Logger; diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/LaunchUtils.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/LaunchUtils.java deleted file mode 100644 index 14ff5c58d8..0000000000 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/LaunchUtils.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.mogo.module.extensions.utils; - -import android.content.Context; -import android.content.Intent; - -/** - * @author congtaowang - * @since 2020-02-03 - *

- * 描述 - */ -public class LaunchUtils { - - /** - * 通过包名启动app - * - * @param context - * @param pkg 包名 - */ - public static void launchByPkg( Context context, String pkg ) throws Exception { - Intent intent = getLaunchIntentForPackage( context, pkg ); - intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); - context.startActivity( intent ); - } - - public static Intent getLaunchIntentForPackage( Context context, String pkg ) { - return context.getPackageManager().getLaunchIntentForPackage( pkg ); - } -} diff --git a/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow2.java b/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow2.java index 69c9f8068a..39f7430c45 100644 --- a/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow2.java +++ b/modules/mogo-module-media/src/main/java/com/mogo/module/media/MediaWindow2.java @@ -14,14 +14,12 @@ import com.mogo.module.media.constants.MusicConstant; import com.mogo.module.media.listener.NoDoubleClickListener; import com.mogo.module.media.model.MediaInfoData; import com.mogo.module.media.presenter.WeCarFlowPresenter; -import com.mogo.module.media.utils.LaunchUtils; -import com.mogo.module.media.utils.MusicControlBroadCast; import com.mogo.module.media.utils.Utils; import com.mogo.module.media.view.IMusicView; import com.mogo.module.media.widget.AnimCircleImageView; import com.mogo.module.media.widget.NoScrollSeekBar; import com.mogo.module.media.widget.ScrollingTextView; -import com.mogo.utils.TipToast; +import com.mogo.utils.LaunchUtils; import com.mogo.utils.glide.GlideApp; import com.mogo.utils.logger.Logger; import com.tencent.wecarflow.flowoutside.sdk.FlowPlayControl; 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 50370ed441..8174510733 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 @@ -5,14 +5,12 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.location.Location; -import android.location.LocationManager; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.MotionEvent; -import android.view.View; import androidx.annotation.NonNull; @@ -29,13 +27,11 @@ import com.mogo.map.navi.IMogoNavi; import com.mogo.map.navi.IMogoNaviListener; import com.mogo.map.navi.MogoCongestionInfo; import com.mogo.map.navi.MogoTraffic; -import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.module.common.MogoModule; import com.mogo.module.common.MogoModulePaths; import com.mogo.module.common.map.MapCenterPointStrategy; import com.mogo.module.common.map.Scene; -import com.mogo.module.service.carinfo.CarStateInfo; import com.mogo.module.service.intent.IntentHandlerFactory; import com.mogo.module.service.marker.MapMarkerManager; import com.mogo.module.service.network.RefreshCallback; @@ -59,10 +55,8 @@ import com.mogo.service.module.MogoAction; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.statusmanager.StatusDescriptor; -import com.mogo.utils.UiThreadHandler; import com.mogo.utils.WorkThreadHandler; import com.mogo.utils.logger.Logger; -import com.mogo.utils.network.utils.GsonUtil; import org.json.JSONObject; @@ -363,7 +357,7 @@ public class MogoServices implements IMogoMapListener, if ( msg.obj instanceof RefreshObject ) { RefreshObject ro = ( ( RefreshObject ) msg.obj ); mRefreshModel.refreshData( ro.mLonLat, ro.mRadius, ro.mAmount, ro.mCallback ); - MapMarkerManager.getInstance().getOnlineCarData( ro.mLonLat ); + MapMarkerManager.getInstance().getOnlineCarDataByAutoRefreshStrategy( ro.mLonLat ); Logger.i( TAG, "刷新半径 = %s, 点 = %s, zoomLevel = %s, amount = %s", ro.mRadius, ro.mLonLat, mLastZoomLevel, ro.mAmount ); } @@ -724,6 +718,7 @@ public class MogoServices implements IMogoMapListener, delay = mRefreshRemainingTime; } mHandler.sendEmptyMessageDelayed( ServiceConst.MSG_TYPE_REFRESH_DECREASE, delay ); + MapMarkerManager.getInstance().stopAutoRefresh(); Logger.i( TAG, "下次刷新时间:%ss后", mRefreshRemainingTime ); } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/OnlineCarSearchIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/OnlineCarSearchIntentHandler.java index e20915bd3b..35c49a7e2c 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/OnlineCarSearchIntentHandler.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/OnlineCarSearchIntentHandler.java @@ -74,9 +74,8 @@ class OnlineCarSearchIntentHandler implements IntentHandler { isSameCity = true; case ServiceConst.COMMAND_ZHIDAO_NEARBY_CAR_ONLINE: case ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND_ONLINE: - MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( TAG, true, false ); - MarkerServiceHandler.getMapUIController().moveToCenter( target ); - MapMarkerManager.getInstance().getOnlineCarData( + Logger.d( TAG, "搜索附近的好友/在线车辆" ); + doDataRequest( target, isFocus, isSameCity, @@ -111,9 +110,7 @@ class OnlineCarSearchIntentHandler implements IntentHandler { } if ( TextUtils.equals( "附近", keyword ) ) { - MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( TAG, true, false ); - MarkerServiceHandler.getMapUIController().moveToCenter( target ); - MapMarkerManager.getInstance().getOnlineCarData( + doDataRequest( target, false, false, @@ -130,9 +127,7 @@ class OnlineCarSearchIntentHandler implements IntentHandler { Logger.e( TAG, "geo 检索位置错误" ); return; } - MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( TAG, true, false ); - MarkerServiceHandler.getMapUIController().moveToCenter( geocodeResult.getAddresses().get( 0 ).getLatlng() ); - MapMarkerManager.getInstance().getOnlineCarData( + doDataRequest( target, false, false, @@ -164,4 +159,20 @@ class OnlineCarSearchIntentHandler implements IntentHandler { } return null; } + + private void doDataRequest( MogoLatLng target, + boolean onlyFocus, + boolean onlySameCity, + int limit, + int radius ) { + MarkerServiceHandler.getApis().getRefreshStrategyControllerApi().restartAutoRefreshAtTime( 30_000 ); + MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( TAG, true, false ); + MarkerServiceHandler.getMapUIController().moveToCenter( target ); + MapMarkerManager.getInstance().getOnlineCarDataByVoiceControl( + target, + onlyFocus, + onlySameCity, + limit, + radius ); + } } 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 1e6c812512..0be8fff665 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,10 +1,11 @@ package com.mogo.module.service.marker; import android.content.Context; +import android.graphics.Rect; import android.text.TextUtils; +import com.mogo.commons.AbsMogoApplication; import com.mogo.map.MogoLatLng; -import com.mogo.map.location.MogoLocation; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.marker.IMogoMarkerManager; @@ -16,12 +17,12 @@ import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.MarkerLocation; import com.mogo.module.common.entity.MarkerNoveltyInfo; import com.mogo.module.common.entity.MarkerOnlineCar; -import com.mogo.module.common.entity.MarkerPoiTypeEnum; 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.common.utils.CarSeries; import com.mogo.module.service.MarkerServiceHandler; +import com.mogo.module.service.R; import com.mogo.module.service.ServiceConst; import com.mogo.module.service.Utils; import com.mogo.module.service.network.RefreshCallback; @@ -29,6 +30,7 @@ import com.mogo.module.service.network.RefreshModel; import com.mogo.module.service.utils.ViewUtils; import com.mogo.service.connection.IMogoOnMessageListener; import com.mogo.service.module.IMogoBizActionDoneListener; +import com.mogo.utils.ResourcesHelper; import com.mogo.utils.ThreadPoolService; import com.mogo.utils.UiThreadHandler; import com.mogo.utils.logger.Logger; @@ -67,6 +69,8 @@ public class MapMarkerManager implements IMogoMarkerClickListener, // 平滑移动事件间隔(单位:秒) private static final int SMOOTH_DURATION = 15; + private Rect mMarkerDisplayBounds; + private MapMarkerManager() { } @@ -272,16 +276,26 @@ public class MapMarkerManager implements IMogoMarkerClickListener, * * @param onlineCarList */ - private void drawOnlineCarMarkers( List< MarkerOnlineCar > onlineCarList, int maxAmount ) { + private void drawOnlineCarMarkers( List< MarkerOnlineCar > onlineCarList, + int maxAmount, + boolean clearOld, + boolean showBounds, + Rect bound, + MogoLatLng centerPoint ) { // 将数据同步给在线车辆,避免每次 perform 的时候去拉取,造成消耗 if ( onlineCarList == null || onlineCarList.isEmpty() ) { return; } + if ( clearOld ) { + MarkerServiceHandler.getMarkerManager().removeMarkers( ModuleNames.CARD_TYPE_USER_DATA ); + } + int size = getAppropriateSize( maxAmount, onlineCarList ); Map< String, IMogoMarker > existCarMap = purgeMarkerData( onlineCarList, ModuleNames.CARD_TYPE_USER_DATA ); + List< MogoLatLng > carPoints = new ArrayList<>(); for ( int i = 0; i < size; i++ ) { MarkerOnlineCar markerOnlineCar = onlineCarList.get( i ); MarkerLocation markerLocation = markerOnlineCar.getLocation(); @@ -295,6 +309,10 @@ public class MapMarkerManager implements IMogoMarkerClickListener, markerShowEntity.setIconUrl( markerOnlineCar.getUserInfo().getUserHead() ); } + if ( i <= 5 ) { + carPoints.add( new MogoLatLng( markerLocation.getLat(), markerLocation.getLon() ) ); + } + String sn = getCarSnFromEntity( markerOnlineCar ); IMogoMarker mogoMarker = existCarMap.get( sn ); if ( mogoMarker == null ) { @@ -302,6 +320,11 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } startSmooth( mogoMarker, markerOnlineCar, markerLocation ); } + + if ( showBounds && bound != null ) { + // 将前6个点显示在固定范围内 + MarkerServiceHandler.getMapUIController().showBounds( TAG, centerPoint, carPoints, bound, false ); + } } /** @@ -662,34 +685,58 @@ public class MapMarkerManager implements IMogoMarkerClickListener, mCarLatLng = new MogoLatLng( lat, lon ); } - public void getOnlineCarData( MogoLatLng latlng ) { - getOnlineCarData( latlng, false, false, 50, 2_000 ); - } - - public void getOnlineCarData( MogoLatLng latLng, - boolean onlyFocus, - boolean onlySameCity, - int limit, - int radius ) { + public void getOnlineCarDataByAutoRefreshStrategy( MogoLatLng latlng ) { UiThreadHandler.removeCallbacks( runnable ); UiThreadHandler.postDelayed( runnable, SMOOTH_DURATION * 1000 ); - getOnlineCarList( latLng, onlyFocus, onlySameCity, limit, radius ); + getOnlineCarDataImpl( latlng, false, false, 50, 2_000, false ); + } + + /** + * @param latLng + * @param onlyFocus + * @param onlySameCity + * @param limit + * @param radius + */ + public void getOnlineCarDataByVoiceControl( MogoLatLng latLng, + boolean onlyFocus, + boolean onlySameCity, + int limit, + int radius ) { + UiThreadHandler.removeCallbacks( runnable ); + UiThreadHandler.postDelayed( runnable, SMOOTH_DURATION * 1000 ); + getOnlineCarDataImpl( latLng, onlyFocus, onlySameCity, limit, radius, true ); } private Runnable runnable = new Runnable() { @Override public void run() { - getOnlineCarList( mCarLatLng, false, false, 2_000, 50 ); + getOnlineCarDataImpl( mCarLatLng, false, false, 50, 2_000, false ); UiThreadHandler.postDelayed( this, SMOOTH_DURATION * 1000 ); } }; - private void getOnlineCarList( + public void stopAutoRefresh(){ + UiThreadHandler.removeCallbacks( runnable ); + } + + /** + * 搜索在线车辆 + * + * @param latLng 搜索中心点 + * @param onlyFocus 是否关注 + * @param onlySameCity 是否是相同城市 + * @param limit 条数限制 + * @param radius 搜索半径 + * @param fitBounds 是否显示在可视范围内 + */ + private void getOnlineCarDataImpl( MogoLatLng latLng, boolean onlyFocus, boolean onlySameCity, int limit, - int radius ) { + int radius, + boolean fitBounds ) { if ( latLng == null ) { return; @@ -716,8 +763,17 @@ public class MapMarkerManager implements IMogoMarkerClickListener, int size = onlineCarList == null ? 0 : onlineCarList.size(); trackData( size ); + if ( mMarkerDisplayBounds == null ) { + mMarkerDisplayBounds = new Rect( + ResourcesHelper.getDimensionPixelSize( AbsMogoApplication.getApp(), R.dimen.module_service_marker_bounds_leftMargin ), + ResourcesHelper.getDimensionPixelSize( AbsMogoApplication.getApp(), R.dimen.module_service_marker_bounds_topMargin ), + ResourcesHelper.getDimensionPixelSize( AbsMogoApplication.getApp(), R.dimen.module_service_marker_bounds_rightMargin ), + ResourcesHelper.getDimensionPixelSize( AbsMogoApplication.getApp(), R.dimen.module_service_marker_bounds_bottomMargin ) + ); + } + runOnTargetThread( () -> { - drawOnlineCarMarkers( onlineCarList, Integer.MAX_VALUE ); + drawOnlineCarMarkers( onlineCarList, Integer.MAX_VALUE, fitBounds, fitBounds, mMarkerDisplayBounds, latLng ); } ); } diff --git a/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml index 26755769dc..8c98cbda76 100644 --- a/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-service/src/main/res/values-xhdpi/dimens.xml @@ -7,4 +7,10 @@ 50px 50px 24px + + + 1000px + 390px + 200px + 200px \ No newline at end of file diff --git a/modules/mogo-module-service/src/main/res/values/dimens.xml b/modules/mogo-module-service/src/main/res/values/dimens.xml index dd048922b7..451d9a661b 100644 --- a/modules/mogo-module-service/src/main/res/values/dimens.xml +++ b/modules/mogo-module-service/src/main/res/values/dimens.xml @@ -7,4 +7,9 @@ 27px 27px 14px + + 550px + 208px + 100px + 100px \ No newline at end of file