This commit is contained in:
wangcongtao
2020-04-13 09:52:40 +08:00
parent da875fc233
commit 45e480cefa
28 changed files with 768 additions and 756 deletions

View File

@@ -144,17 +144,6 @@ public class AppNavigatorFragment extends MvpFragment<AppNavigatorView, AppNavig
return new AppNavigatorPresenter(this); return new AppNavigatorPresenter(this);
} }
private void openSearchPanel() {
mSearchProvider = (IMogoModuleProvider) ARouter.getInstance()
.build(MogoModulePaths.PATH_MODULE_SEARCH)
.navigation();
final Fragment fragment = mSearchProvider.createFragment(getContext(), null);
mMogoFragmentManager.push(new FragmentDescriptor.Builder().fragment(fragment)
.tag(MogoModulePaths.PATH_FRAGMENT_SEARCH)
.notifyMainModule(true)
.build());
}
@Override @Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) { public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);

View File

@@ -20,6 +20,11 @@ android {
} }
} }
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
} }
dependencies { dependencies {

View File

@@ -6,7 +6,6 @@ import androidx.annotation.Keep;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Vector;
/** /**
* @author congtaowang * @author congtaowang
@@ -38,57 +37,6 @@ public class MogoModulePaths {
public static void addModule( String path ) { public static void addModule( String path ) {
throw new IllegalArgumentException( "this method can't be invoked." ); throw new IllegalArgumentException( "this method can't be invoked." );
} }
/**
* 搜索页面模块实例化路径
*/
@Keep
public static final String PATH_MODULE_SEARCH= "/navi/search/ui";
/**
* 搜索页面Activity实例化路径
*/
@Keep
public static final String PATH_MODULE_NAV_ACTIVITY= "/navi/search/ui/activity";
/**
* 搜索 fragment
*/
@Keep
public static final String PATH_FRAGMENT_SEARCH = "/navi/search";
/**
* 搜索 fragment
*/
@Keep
public static final String PATH_FRAGMENT_CHOOSE_PAHT = "/navi/search";
/**
* 按类别搜索 fragment
*/
@Keep
public static final String PATH_FRAGMENT_SEARCH_CATEGORY = "/navi/search/category";
/**
* 设置 fragment
*/
@Keep
public static final String PATH_FRAGMENT_SETTING = "/navi/setting";
/**
* 设置家和公司 fragment
*/
@Keep
public static final String PATH_FRAGMENT_SETTING_HOME = "/navi/setting/home";
/** /**
* 添加卡片模块 * 添加卡片模块

View File

@@ -0,0 +1,16 @@
package com.mogo.module.common.map;
/**
* @author congtaowang
* @since 2020-04-10
* <p>
* 拦截器
*/
public interface Interrupter {
/**
* 是否拦截
* @return true - 拦截, false - 不拦截
*/
boolean interrupt();
}

View File

@@ -0,0 +1,19 @@
package com.mogo.module.common.map;
/**
* @author congtaowang
* @since 2020-04-10
* <p>
* 地图视图中心点
*/
public class MapCenterPoint {
public final double x;
public final double y;
public MapCenterPoint( double x, double y ) {
this.x = x;
this.y = y;
}
}

View File

@@ -0,0 +1,125 @@
package com.mogo.module.common.map;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.utils.CarSeries;
import com.mogo.utils.UiThreadHandler;
import com.mogo.utils.logger.Logger;
import java.util.HashMap;
import java.util.Map;
/**
* @author congtaowang
* @since 2020-04-10
* <p>
* 地图中心点策略
*/
public class MapCenterPointStrategy {
private static final String TAG = "MapCenterPointStrategy";
private static Map< Integer, Map< Integer, MapCenterPoint > > sStrategies = new HashMap<>();
public static final MapCenterPoint DEFAULT = new MapCenterPoint( 0.677734D, 0.5733333D );
static {
// 普通场景,使用高德内部值
Map< Integer, MapCenterPoint > common = new HashMap<>();
common.put( CarSeries.CAR_SERIES_D80X, new MapCenterPoint( 0.5D, 0.666666666D ) );
common.put( CarSeries.CAR_SERIES_F80X, new MapCenterPoint( 0.5D, 0.666666666D ) );
sStrategies.put( Scene.COMMON, common );
// 选点场景,定位中心点
Map< Integer, MapCenterPoint > choosePoint = new HashMap<>();
choosePoint.put( CarSeries.CAR_SERIES_D80X, new MapCenterPoint( 0.5D, 0.5D ) );
choosePoint.put( CarSeries.CAR_SERIES_F80X, new MapCenterPoint( 0.5D, 0.5D ) );
sStrategies.put( Scene.CHOOSE_POINT, choosePoint );
// 导航场景,定位视图右下角偏下
Map< Integer, MapCenterPoint > navi = new HashMap<>();
navi.put( CarSeries.CAR_SERIES_D80X, new MapCenterPoint( 0.7734375D, 0.65D ) );
navi.put( CarSeries.CAR_SERIES_F80X, new MapCenterPoint( 0.775521D, 0.6759259D ) );
sStrategies.put( Scene.NAVI, navi );
// 巡航场景,定位视图右下角偏下
Map< Integer, MapCenterPoint > aimless = new HashMap<>();
aimless.put( CarSeries.CAR_SERIES_D80X, new MapCenterPoint( 0.677734375D, 0.54D ) );
aimless.put( CarSeries.CAR_SERIES_F80X, new MapCenterPoint( 0.6963541D, 0.6833333D ) );
sStrategies.put( Scene.AIMLESS, aimless );
// 规划路线,定位视图右边
Map< Integer, MapCenterPoint > calculatePath = new HashMap<>();
calculatePath.put( CarSeries.CAR_SERIES_D80X, new MapCenterPoint( 0.733398D, 0.610833D ) );
calculatePath.put( CarSeries.CAR_SERIES_F80X, new MapCenterPoint( 0.703125D, 0.6083333D ) );
sStrategies.put( Scene.CALCULATE_PATH, calculatePath );
// 分类搜索,定位视图右边
Map< Integer, MapCenterPoint > categorySearch = new HashMap<>();
categorySearch.put( CarSeries.CAR_SERIES_D80X, new MapCenterPoint( 0.733398D, 0.610833D ) );
categorySearch.put( CarSeries.CAR_SERIES_F80X, new MapCenterPoint( 0.733594D, 0.596759D ) );
sStrategies.put( Scene.CATEGORY_SEARCH, categorySearch );
}
public static void addScene( int scene, Map< Integer, MapCenterPoint > config ) {
if ( sStrategies.containsKey( scene ) ) {
Logger.w( TAG, "scene has already defined, append config..." );
}
if ( sStrategies.get( scene ) != null ) {
sStrategies.get( scene ).putAll( config );
} else {
sStrategies.put( scene, config );
}
}
/**
* 根据场景触发地图视图改变
*
* @param controller
* @param scene
*/
public static void setMapCenterPointByScene( IMogoMapUIController controller, int scene ) {
if ( controller == null ) {
return;
}
if ( !sStrategies.containsKey( scene ) ) {
Logger.w( TAG, "no strategy for scene: %s, use DEFAULT", scene );
controller.setPointToCenter( DEFAULT.x, DEFAULT.y );
return;
}
Map< Integer, MapCenterPoint > points = sStrategies.get( scene );
int car = CarSeries.getSeries();
if ( !points.containsKey( car ) ) {
Logger.w( TAG, "no strategy for series: %s, use DEFAULT", scene );
controller.setPointToCenter( DEFAULT.x, DEFAULT.y );
return;
}
MapCenterPoint point = points.get( car );
if ( point == null ) {
Logger.w( TAG, "no strategy config for series: %s, use DEFAULT", scene );
controller.setPointToCenter( DEFAULT.x, DEFAULT.y );
return;
}
controller.setPointToCenter( point.x, point.y );
}
/**
* 根据场景触发地图视图改变
*
* @param controller
* @param scene
*/
public static void setMapCenterPointBySceneAndDelay( final IMogoMapUIController controller, final int scene, long delay, final Interrupter interrupter ) {
UiThreadHandler.postDelayed( () -> {
if ( interrupter != null ) {
if ( interrupter.interrupt() ) {
return;
}
}
setMapCenterPointByScene( controller, scene );
}, delay );
}
}

View File

@@ -0,0 +1,40 @@
package com.mogo.module.common.map;
/**
* @author congtaowang
* @since 2020-04-10
* <p>
* 描述
*/
public interface Scene {
/**
* 普通场景
*/
int COMMON = 0;
/**
* 选点
*/
int CHOOSE_POINT = 1;
/**
* 导航
*/
int NAVI = 2;
/**
* 巡航
*/
int AIMLESS = 3;
/**
* 路线规划
*/
int CALCULATE_PATH = 4;
/**
* 分类搜索
*/
int CATEGORY_SEARCH = 5;
}

View File

@@ -1,10 +1,7 @@
package com.mogo.module.extensions.entrance; package com.mogo.module.extensions.entrance;
import android.content.Intent; import android.content.Intent;
import android.graphics.Color;
import android.graphics.Rect;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
@@ -29,16 +26,14 @@ import com.mogo.map.navi.MogoCongestionInfo;
import com.mogo.map.navi.MogoNaviInfo; import com.mogo.map.navi.MogoNaviInfo;
import com.mogo.map.navi.MogoTraffic; import com.mogo.map.navi.MogoTraffic;
import com.mogo.map.overlay.IMogoPolyline; import com.mogo.map.overlay.IMogoPolyline;
import com.mogo.map.overlay.MogoPolylineOptions;
import com.mogo.map.uicontroller.EnumMapUI; import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant; import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant;
import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant;
import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeContentListener;
import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeRegister;
import com.mogo.module.authorize.authprovider.module.IMogoAcquireAuthorizeListener; import com.mogo.module.authorize.authprovider.module.IMogoAcquireAuthorizeListener;
import com.mogo.module.authorize.authprovider.module.IMogoAuthorizeModuleManager; import com.mogo.module.authorize.authprovider.module.IMogoAuthorizeModuleManager;
import com.mogo.module.common.MogoModulePaths; import com.mogo.module.common.MogoModulePaths;
import com.mogo.module.common.map.MapCenterPointStrategy;
import com.mogo.module.common.map.Scene;
import com.mogo.module.extensions.ExtensionsModuleConst; import com.mogo.module.extensions.ExtensionsModuleConst;
import com.mogo.module.extensions.R; import com.mogo.module.extensions.R;
import com.mogo.module.extensions.dialog.NaviNoticeDialog; import com.mogo.module.extensions.dialog.NaviNoticeDialog;
@@ -55,16 +50,10 @@ import com.mogo.service.module.IMogoAddressManager;
import com.mogo.service.module.IMogoModuleProvider; import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.service.module.IMogoRegisterCenter; import com.mogo.service.module.IMogoRegisterCenter;
import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.utils.WindowUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import retrofit2.http.HEAD;
import static com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant.AUTHORIZE_TYPE_LAUNCHER_SHARE; import static com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant.AUTHORIZE_TYPE_LAUNCHER_SHARE;
/** /**
@@ -118,7 +107,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
/** /**
* 搜索莫模块 * 搜索莫模块
*/ */
private IMogoModuleProvider mSearchProvider;
private boolean mIsLock = true; private boolean mIsLock = true;
private TextView ivMode; private TextView ivMode;
@@ -145,22 +133,12 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
mSearch = findViewById( R.id.module_entrance_id_search ); mSearch = findViewById( R.id.module_entrance_id_search );
mSearch.setOnClickListener( view -> { mSearch.setOnClickListener( view -> {
setMarkerStatus( true ); mApis.getAddressManagerApi().goSearch();
mSearchProvider = ( IMogoModuleProvider ) ARouter.getInstance()
.build( MogoModulePaths.PATH_MODULE_SEARCH )
.navigation();
final Fragment fragment = mSearchProvider.createFragment( getContext(), null );
mMogoFragmentManager.push( new FragmentDescriptor.Builder().fragment( fragment )
.tag( MogoModulePaths.PATH_FRAGMENT_SEARCH )
.notifyMainModule( true )
.build() );
mApis.getAdasControllerApi().closeADAS(); mApis.getAdasControllerApi().closeADAS();
} ); } );
mHome = findViewById( R.id.module_entrance_id_home ); mHome = findViewById( R.id.module_entrance_id_home );
mHome.setOnClickListener( view -> { mHome.setOnClickListener( view -> {
setMarkerStatus( true );
mMogoAddressManager.goHome(); mMogoAddressManager.goHome();
mApis.getAdasControllerApi().closeADAS(); mApis.getAdasControllerApi().closeADAS();
@@ -168,7 +146,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
mCompany = findViewById( R.id.module_entrance_id_company ); mCompany = findViewById( R.id.module_entrance_id_company );
mCompany.setOnClickListener( view -> { mCompany.setOnClickListener( view -> {
setMarkerStatus( true );
mMogoAddressManager.goCompany(); mMogoAddressManager.goCompany();
mApis.getAdasControllerApi().closeADAS(); mApis.getAdasControllerApi().closeADAS();
@@ -210,6 +187,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
NaviNoticeDialog naviNoticeDialog = new NaviNoticeDialog( getContext() ); NaviNoticeDialog naviNoticeDialog = new NaviNoticeDialog( getContext() );
naviNoticeDialog.show(); naviNoticeDialog.show();
} else { } else {
MapCenterPointStrategy.setMapCenterPointByScene( mMApUIController, Scene.NAVI );
mMApUIController.recoverLockMode(); mMApUIController.recoverLockMode();
} }
} }
@@ -254,12 +232,6 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
} }
protected void setMarkerStatus( boolean show ) {
mMogoStatusManager.setSearchUIShow( MogoModulePaths.PATH_FRAGMENT_SEARCH_CATEGORY, show );
}
private static final String AUTONAVI_STANDARD_BROADCAST_RECV = "AUTONAVI_STANDARD_BROADCAST_RECV"; private static final String AUTONAVI_STANDARD_BROADCAST_RECV = "AUTONAVI_STANDARD_BROADCAST_RECV";
@NonNull @NonNull
@@ -342,8 +314,10 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
mNaviInfo.setVisibility( View.VISIBLE ); mNaviInfo.setVisibility( View.VISIBLE );
ivMode.setVisibility( View.VISIBLE ); ivMode.setVisibility( View.VISIBLE );
mExitNavi.setVisibility( View.VISIBLE ); mExitNavi.setVisibility( View.VISIBLE );
mMApUIController.setPointToCenter( 0.675926, 0.77552 );
mMApUIController.changeMapMode( ivMode.isSelected() ? EnumMapUI.NorthUP_2D : EnumMapUI.CarUp_2D ); mMApUIController.changeMapMode( ivMode.isSelected() ? EnumMapUI.NorthUP_2D : EnumMapUI.CarUp_2D );
MapCenterPointStrategy.setMapCenterPointBySceneAndDelay( mMApUIController, Scene.NAVI, 500, () -> {
return !mMogoNavi.isNaviing();
} );
} }
@Override @Override
@@ -353,8 +327,8 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
ivMode.setVisibility( View.GONE ); ivMode.setVisibility( View.GONE );
mExitNavi.setVisibility( View.GONE ); mExitNavi.setVisibility( View.GONE );
mSpeedLimit.setVisibility( View.GONE ); mSpeedLimit.setVisibility( View.GONE );
mMApUIController.setPointToCenter( 0.66145, 0.590688 );
mMApUIController.changeMapMode( EnumMapUI.NorthUP_2D ); mMApUIController.changeMapMode( EnumMapUI.NorthUP_2D );
MapCenterPointStrategy.setMapCenterPointByScene( mMApUIController, Scene.AIMLESS );
} }
@Override @Override

View File

@@ -21,6 +21,8 @@ import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.MogoModule; import com.mogo.module.common.MogoModule;
import com.mogo.module.common.MogoModulePaths; import com.mogo.module.common.MogoModulePaths;
import com.mogo.module.common.map.MapCenterPointStrategy;
import com.mogo.module.common.map.Scene;
import com.mogo.module.main.cards.CardIntroduceConfigs; import com.mogo.module.main.cards.CardIntroduceConfigs;
import com.mogo.module.main.cards.CardModulesAdapter; import com.mogo.module.main.cards.CardModulesAdapter;
import com.mogo.module.main.cards.HorizentalStackTransformer; import com.mogo.module.main.cards.HorizentalStackTransformer;
@@ -261,7 +263,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
// 右移地图中心点 // 右移地图中心点
mMogoMapUIController = mMogoMapService.getMapUIController(); mMogoMapUIController = mMogoMapService.getMapUIController();
mMogoMapUIController.setPointToCenter( 0.66145, 0.590688 ); MapCenterPointStrategy.setMapCenterPointByScene( mMogoMapUIController, Scene.AIMLESS );
// 开启定位 // 开启定位
startLocation(); startLocation();

View File

@@ -34,4 +34,11 @@ public class AMapConstants {
public static final float AMAP_ROUTE_OVERLAY_TRANSPARENCY_SELECTED = 1f; public static final float AMAP_ROUTE_OVERLAY_TRANSPARENCY_SELECTED = 1f;
public static final float AMAP_ROUTE_OVERLAY_TRANSPARENCY_UNSELECTED = 0.3f; public static final float AMAP_ROUTE_OVERLAY_TRANSPARENCY_UNSELECTED = 0.3f;
public static final String PATH_FRAGMENT_SEARCH = "PATH_FRAGMENT_SEARCH";
public static final String PATH_FRAGMENT_CHOOSE_PATH = "PATH_FRAGMENT_CHOOSE_PATH";
public static final String PATH_FRAGMENT_SEARCH_CATEGORY = "PATH_FRAGMENT_SEARCH_CATEGORY";
public static final String PATH_FRAGMENT_SETTING = "PATH_FRAGMENT_SETTING";
public static final String PATH_FRAGMENT_NAVI_SETTING = "PATH_FRAGMENT_NAVI_SETTING";
public static final String PATH_FRAGMENT_SETTING_HOME = "PATH_FRAGMENT_SETTING_HOME";
} }

View File

@@ -16,6 +16,7 @@ import com.mogo.service.MogoServicePaths
import com.mogo.service.analytics.IMogoAnalytics import com.mogo.service.analytics.IMogoAnalytics
import com.mogo.service.fragmentmanager.FragmentDescriptor import com.mogo.service.fragmentmanager.FragmentDescriptor
import com.mogo.service.fragmentmanager.IMogoFragmentManager import com.mogo.service.fragmentmanager.IMogoFragmentManager
import com.mogo.service.launcher.IMogoLauncher
import com.mogo.service.map.IMogoMapService import com.mogo.service.map.IMogoMapService
import com.mogo.service.module.IMogoRegisterCenter import com.mogo.service.module.IMogoRegisterCenter
import com.mogo.service.statusmanager.IMogoStatusManager import com.mogo.service.statusmanager.IMogoStatusManager
@@ -28,24 +29,14 @@ import com.mogo.service.statusmanager.IMogoStatusManager
object SearchServiceHolder{ object SearchServiceHolder{
// 单例对象要使用Application Context // 单例对象要使用Application Context
private lateinit var context: Context private lateinit var context: Context
val fragmentManager: IMogoFragmentManager = ARouter.getInstance().build(
MogoServicePaths.PATH_FRAGMENT_MANAGER val fragmentManager: IMogoFragmentManager = ARouter.getInstance().build(MogoServicePaths.PATH_FRAGMENT_MANAGER).navigation() as IMogoFragmentManager
).navigation() as IMogoFragmentManager val mapService: IMogoMapService = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICES_MAP).navigation() as IMogoMapService
val mapService: IMogoMapService = ARouter.getInstance().build( val listenerCenter: IMogoRegisterCenter = ARouter.getInstance().build(MogoServicePaths.PATH_REGISTER_CENTER).navigation() as IMogoRegisterCenter
MogoServicePaths.PATH_SERVICES_MAP val statusManager: IMogoStatusManager = ARouter.getInstance().build(MogoServicePaths.PATH_STATUS_MANAGER).navigation() as IMogoStatusManager
).navigation() as IMogoMapService val analyticsManager: IMogoAnalytics = ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_ANALYTICS).navigation() as IMogoAnalytics
val listenerCenter: IMogoRegisterCenter = ARouter.getInstance().build( val guideShowProvider: IGuideShowProvider = ARouter.getInstance().build(GuideShowProviderConstant.GUIDE_SHOW_PROVIDER).navigation() as IGuideShowProvider
MogoServicePaths.PATH_REGISTER_CENTER val mogoLauncher: IMogoLauncher = ARouter.getInstance().build(MogoServicePaths.PATH_LAUNCHER_API).navigation() as IMogoLauncher
).navigation() as IMogoRegisterCenter
val statusManager: IMogoStatusManager = ARouter.getInstance().build(
MogoServicePaths.PATH_STATUS_MANAGER
).navigation() as IMogoStatusManager
val analyticsManager: IMogoAnalytics = ARouter.getInstance().build(
MogoServicePaths.PATH_UTILS_ANALYTICS
).navigation() as IMogoAnalytics
val guideShowProvider: IGuideShowProvider = ARouter.getInstance().build(
GuideShowProviderConstant.GUIDE_SHOW_PROVIDER
).navigation() as IGuideShowProvider
var geoSearch: IMogoGeoSearch? = null var geoSearch: IMogoGeoSearch? = null
fun init(context: Context) { fun init(context: Context) {
@@ -86,10 +77,4 @@ object SearchServiceHolder{
return geoSearch!! return geoSearch!!
} }
fun setMarkerStatus(show: Boolean) {
statusManager.setSearchUIShow(
MogoModulePaths.PATH_FRAGMENT_SEARCH_CATEGORY, show
)
}
} }

View File

@@ -2,20 +2,25 @@ package com.mogo.module.navi.manager
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import com.mogo.map.MogoLatLng
import com.mogo.module.common.MogoModulePaths import com.mogo.module.common.MogoModulePaths
import com.mogo.module.common.map.MapCenterPointStrategy
import com.mogo.module.common.map.Scene
import com.mogo.module.navi.bean.EntityConvertUtils import com.mogo.module.navi.bean.EntityConvertUtils
import com.mogo.module.navi.bean.SearchPoi import com.mogo.module.navi.bean.SearchPoi
import com.mogo.module.navi.constants.AMapConstants
import com.mogo.module.navi.constants.DataConstants import com.mogo.module.navi.constants.DataConstants
import com.mogo.module.navi.constants.SearchServiceHolder import com.mogo.module.navi.constants.SearchServiceHolder
import com.mogo.module.navi.cp.AddressHelper import com.mogo.module.navi.cp.AddressHelper
import com.mogo.module.navi.dao.SearchPoiDao import com.mogo.module.navi.dao.SearchPoiDao
import com.mogo.module.navi.database.AppDataBase import com.mogo.module.navi.database.AppDataBase
import com.mogo.module.navi.ui.search.CategorySearchFragment
import com.mogo.module.navi.ui.search.ChoosePathFragment import com.mogo.module.navi.ui.search.ChoosePathFragment
import com.mogo.module.navi.ui.search.SearchFragment
import com.mogo.module.navi.ui.setting.NaviSettingFragment
import com.mogo.module.navi.ui.setting.SettingAddressFragment import com.mogo.module.navi.ui.setting.SettingAddressFragment
import com.mogo.service.fragmentmanager.FragmentDescriptor import com.mogo.service.fragmentmanager.FragmentDescriptor
import com.mogo.utils.UiThreadHandler
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.ObservableEmitter
import io.reactivex.ObservableOnSubscribe import io.reactivex.ObservableOnSubscribe
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
@@ -27,124 +32,153 @@ import org.greenrobot.eventbus.EventBus
*/ */
@SuppressLint("StaticFieldLeak") @SuppressLint("StaticFieldLeak")
object AddressManager { object AddressManager {
var homeAddress: SearchPoi? = null
var companyAddress: SearchPoi? = null
private lateinit var poiDao:SearchPoiDao
fun goHome() {
if (homeAddress == null) {
pushSettingAddress(
DataConstants.TYPE_HOME_ADDRESS
)
} else {
var newInstance = ChoosePathFragment.newInstance(
EntityConvertUtils.poi2MogoTip(
homeAddress
).point
)
SearchServiceHolder.push(
newInstance, MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT
)
}
}
fun goCompany() { val TAG: String = "AddressManager.kt"
if (companyAddress == null) {
pushSettingAddress( var homeAddress: SearchPoi? = null
DataConstants.TYPE_COMPANY_ADDRESS var companyAddress: SearchPoi? = null
) private lateinit var poiDao: SearchPoiDao
} else {
var newInstance = fun hasHome(): Boolean {
ChoosePathFragment.newInstance( return homeAddress != null
EntityConvertUtils.poi2MogoTip( }
companyAddress
).point fun hasCompany(): Boolean {
return companyAddress != null
}
private fun choosePoint(type: Int){
MapCenterPointStrategy.setMapCenterPointByScene(SearchServiceHolder.getMapUIController(), Scene.CHOOSE_POINT)
val builder = FragmentDescriptor.Builder()
builder.fragment(SettingAddressFragment.newInstance(type))
val build = builder.tag(AMapConstants.PATH_FRAGMENT_SETTING_HOME).build()
SearchServiceHolder.fragmentManager.push(build)
}
private lateinit var context: Context
@SuppressLint("CheckResult")
fun init(context: Context) {
this.context = context
poiDao = AppDataBase.getDatabase(context).poiDao()
poiDao.companyAddress
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { t1, t2 ->
if (t1.size > 0) {
companyAddress = t1[0]
}
}
poiDao.homeAddress
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { t1, t2 ->
if (t1.size > 0) {
homeAddress = t1[0]
}
}
}
fun insert(searchPoi: SearchPoi) {
EventBus.getDefault().post(searchPoi)
if (searchPoi.type == DataConstants.TYPE_COMPANY_ADDRESS) {
companyAddress = searchPoi
} else {
homeAddress = searchPoi
}
}
fun deleteHome(context: Context) {
Observable.create(
ObservableOnSubscribe<String> {
poiDao.delete(homeAddress)
homeAddress?.name = ""
AddressHelper.notifyAddressChanged(1)
homeAddress = null
})
.subscribeOn(Schedulers.io())
.subscribe()
}
fun deleteCompany(context: Context) {
Observable.create(
ObservableOnSubscribe<String> {
poiDao.delete(companyAddress)
companyAddress?.name = ""
AddressHelper.notifyAddressChanged(0)
companyAddress = null
})
.subscribeOn(Schedulers.io())
.subscribe()
}
/**
* 回家
*/
fun goHome() {
SearchServiceHolder.statusManager.setSearchUIShow(TAG, true)
if (homeAddress == null) {
choosePoint(DataConstants.TYPE_HOME_ADDRESS)
} else {
calculatePath(EntityConvertUtils.poi2MogoTip(homeAddress).point)
}
}
/**
* 去公司
*/
fun goCompany() {
SearchServiceHolder.statusManager.setSearchUIShow(TAG, true)
if (companyAddress == null) {
choosePoint( DataConstants.TYPE_COMPANY_ADDRESS)
} else {
calculatePath(EntityConvertUtils.poi2MogoTip(companyAddress).point)
}
}
/**
* 搜索
*/
fun goSearch() {
SearchServiceHolder.statusManager.setSearchUIShow(TAG, true)
SearchServiceHolder.fragmentManager.push(
FragmentDescriptor.Builder().fragment(SearchFragment())
.tag(AMapConstants.PATH_FRAGMENT_SEARCH)
.notifyMainModule(true)
.build()
) )
SearchServiceHolder.push(
newInstance, MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT
)
} }
}
fun hasHome(): Boolean { /**
return homeAddress != null * 路径规划
} */
fun calculatePath(destination: MogoLatLng?) {
fun hasCompany(): Boolean { destination?.let {
return companyAddress != null var newInstance = ChoosePathFragment.newInstance(destination)
} SearchServiceHolder.push(newInstance, AMapConstants.PATH_FRAGMENT_CHOOSE_PATH)
private fun pushSettingAddress(type: Int) {
val builder = FragmentDescriptor.Builder()
builder.fragment(SettingAddressFragment.newInstance(type))
val build = builder.tag(MogoModulePaths.PATH_FRAGMENT_SETTING_HOME)
.build()
SearchServiceHolder.fragmentManager.push(build)
}
private lateinit var context: Context
@SuppressLint("CheckResult") fun init(context: Context) {
this.context=context
poiDao = AppDataBase.getDatabase(context)
.poiDao()
poiDao
.companyAddress
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { t1, t2 ->
if (t1.size > 0) {
companyAddress = t1[0]
}
} }
poiDao
.homeAddress
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { t1, t2 ->
if (t1.size > 0) {
homeAddress = t1[0]
}
}
}
fun insert(searchPoi: SearchPoi) {
EventBus.getDefault().post(searchPoi)
if (searchPoi.type == DataConstants.TYPE_COMPANY_ADDRESS) {
companyAddress = searchPoi
} else {
homeAddress = searchPoi
} }
}
fun deleteHome(context: Context){ fun categorySearch(category: String){
Observable.create( val searchFragment = CategorySearchFragment.newInstance(category)
ObservableOnSubscribe<String> { SearchServiceHolder.fragmentManager.push(FragmentDescriptor.Builder().fragment(searchFragment)
poiDao.delete(homeAddress) .tag(AMapConstants.PATH_FRAGMENT_SEARCH_CATEGORY)
homeAddress?.name="" .notifyMainModule(true)
AddressHelper.notifyAddressChanged( 1) .build())
}
homeAddress=null fun goSettings(){
}) val naviSettingFragment = NaviSettingFragment()
.subscribeOn(Schedulers.io()) SearchServiceHolder.fragmentManager.push(FragmentDescriptor.Builder().fragment(naviSettingFragment)
.subscribe() .tag(AMapConstants.PATH_FRAGMENT_NAVI_SETTING)
.notifyMainModule(true)
.build())
}
}
fun deleteCompany(context: Context){
Observable.create(
ObservableOnSubscribe<String> {
poiDao.delete(companyAddress)
companyAddress?.name=""
AddressHelper.notifyAddressChanged( 0)
companyAddress=null
})
.subscribeOn(Schedulers.io())
.subscribe()
}
} }

View File

@@ -2,6 +2,7 @@ package com.mogo.module.navi.manager;
import android.content.Context; import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.map.MogoLatLng;
import com.mogo.module.navi.constants.SearchServiceHolder; import com.mogo.module.navi.constants.SearchServiceHolder;
import com.mogo.service.MogoServicePaths; import com.mogo.service.MogoServicePaths;
import com.mogo.service.module.IMogoAddressManager; import com.mogo.service.module.IMogoAddressManager;
@@ -12,6 +13,7 @@ import com.mogo.service.module.IMogoAddressManager;
*/ */
@Route( path = MogoServicePaths.PATH_ADDRESS_MANAGER ) @Route( path = MogoServicePaths.PATH_ADDRESS_MANAGER )
public class MogoAddressManager implements IMogoAddressManager { public class MogoAddressManager implements IMogoAddressManager {
@Override public void goHome() { @Override public void goHome() {
AddressManager.INSTANCE.goHome(); AddressManager.INSTANCE.goHome();
} }
@@ -20,7 +22,27 @@ public class MogoAddressManager implements IMogoAddressManager {
AddressManager.INSTANCE.goCompany(); AddressManager.INSTANCE.goCompany();
} }
@Override public void init(Context context) { @Override
public void goSearch() {
AddressManager.INSTANCE.goSearch();
}
@Override
public void calculatePath( MogoLatLng destination ) {
AddressManager.INSTANCE.calculatePath( destination );
}
@Override
public void categorySearch( String category ) {
AddressManager.INSTANCE.categorySearch( category );
}
@Override
public void goSettings() {
AddressManager.INSTANCE.goSettings();
}
@Override public void init( Context context) {
AddressManager.INSTANCE.init(context); AddressManager.INSTANCE.init(context);
SearchServiceHolder.INSTANCE.init(context); SearchServiceHolder.INSTANCE.init(context);
SettingManager.INSTANCE.init(context); SettingManager.INSTANCE.init(context);

View File

@@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment;
import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.map.constants.BroadcastMode; import com.mogo.map.constants.BroadcastMode;
import com.mogo.module.common.MogoModulePaths; import com.mogo.module.common.MogoModulePaths;
import com.mogo.module.navi.constants.AMapConstants;
import com.mogo.module.navi.constants.SearchServiceHolder; import com.mogo.module.navi.constants.SearchServiceHolder;
import com.mogo.module.navi.ui.search.CategorySearchFragment; import com.mogo.module.navi.ui.search.CategorySearchFragment;
import com.mogo.module.navi.ui.search.SearchFragment; import com.mogo.module.navi.ui.search.SearchFragment;
@@ -30,7 +31,7 @@ public class MogoSearchManager implements IMogoSearchManager {
SearchFragment searchFragment = new SearchFragment(); SearchFragment searchFragment = new SearchFragment();
SearchServiceHolder.INSTANCE.getFragmentManager() SearchServiceHolder.INSTANCE.getFragmentManager()
.push(new FragmentDescriptor.Builder().fragment(searchFragment) .push(new FragmentDescriptor.Builder().fragment(searchFragment)
.tag(MogoModulePaths.PATH_FRAGMENT_SEARCH) .tag( AMapConstants.PATH_FRAGMENT_SEARCH)
.notifyMainModule(true) .notifyMainModule(true)
.build()); .build());
} }
@@ -49,12 +50,7 @@ public class MogoSearchManager implements IMogoSearchManager {
} }
@Override public void showCategory(String keyword) { @Override public void showCategory(String keyword) {
Fragment searchFragment = CategorySearchFragment.Companion.newInstance(keyword); AddressManager.INSTANCE.categorySearch( keyword );
SearchServiceHolder.INSTANCE.getFragmentManager()
.push(new FragmentDescriptor.Builder().fragment(searchFragment)
.tag(MogoModulePaths.PATH_FRAGMENT_SEARCH_CATEGORY)
.notifyMainModule(true)
.build());
} }
@Override public void init(Context context) { @Override public void init(Context context) {

View File

@@ -1,109 +1,90 @@
package com.mogo.module.navi.manager package com.mogo.module.navi.manager
import android.app.SearchManager
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.text.TextUtils import android.text.TextUtils
import com.mogo.map.MogoLatLng import com.mogo.map.MogoLatLng
import com.mogo.map.navi.MogoNaviConfig
import com.mogo.module.common.MogoModulePaths import com.mogo.module.common.MogoModulePaths
import com.mogo.module.navi.constants.SearchServiceHolder import com.mogo.module.navi.constants.SearchServiceHolder
import com.mogo.module.navi.ui.search.ChoosePathFragment import com.mogo.module.navi.ui.search.ChoosePathFragment
import com.mogo.utils.logger.Logger
import androidx.core.content.ContextCompat.startActivity
import com.mogo.map.navi.MogoNaviConfig
import com.mogo.module.navi.ui.search.SearchFragment import com.mogo.module.navi.ui.search.SearchFragment
import com.mogo.service.fragmentmanager.FragmentDescriptor import com.mogo.service.fragmentmanager.FragmentDescriptor
import com.mogo.utils.logger.Logger
/** /**
*@author zyz *@author zyz
* 2020-01-18. * 2020-01-18.
*/ */
object NaviManager { object NaviManager {
private lateinit var mReceiver: BroadcastReceiver private lateinit var mReceiver: BroadcastReceiver
private val AUTONAVI_STANDARD_BROADCAST_RECV = "AUTONAVI_STANDARD_BROADCAST_RECV" private val AUTONAVI_STANDARD_BROADCAST_RECV = "AUTONAVI_STANDARD_BROADCAST_RECV"
fun init(context: Context) { fun init(context: Context) {
mReceiver = object : BroadcastReceiver() { mReceiver = object : BroadcastReceiver() {
override fun onReceive( override fun onReceive(context: Context, intent: Intent) {
context: Context, val action = intent.action
intent: Intent if (TextUtils.equals(action, AUTONAVI_STANDARD_BROADCAST_RECV)) {
) { val key_type = intent.getIntExtra("KEY_TYPE", 0)
val action = intent.action Logger.d("NaviManager", "key_type" + key_type, null)
if (TextUtils.equals(action, AUTONAVI_STANDARD_BROADCAST_RECV)) { if (key_type == 10038 || key_type == 10007) {
val key_type = intent.getIntExtra("KEY_TYPE", 0) SearchServiceHolder.mogoLauncher.backToLauncher(context)
Logger.d("NaviManager", "key_type" + key_type, null) choosePath(intent, key_type)
if (key_type == 10038 || key_type == 10007) { } else if (key_type == 10021) {
val lat: Double SearchServiceHolder.getNavi().stopNavi()
val lon: Double } else if (key_type == 20009) {
SearchServiceHolder.mogoLauncher.backToLauncher(context)
gotoSearch()
if (key_type == 10007) { } else if (key_type == 10005) {
lat = intent.getDoubleExtra("ENTRY_LAT", 0.0)
lon = intent.getDoubleExtra("ENTRY_LON", 0.0)
} else {
lat = intent.getDoubleExtra("LAT", 0.0)
lon = intent.getDoubleExtra("LON", 0.0)
}
showHome()
SearchServiceHolder.setMarkerStatus(true)
var newInstance =
ChoosePathFragment.newInstance(
MogoLatLng(lat, lon)
)
SearchServiceHolder.push(
newInstance, MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT
)
} else if (key_type == 10021) {
SearchServiceHolder.getNavi()
.stopNavi()
} else if (key_type == 20009) {
showHome()
SearchServiceHolder.setMarkerStatus(true)
SearchServiceHolder.fragmentManager
.clearAll()
val searchFragment = SearchFragment()
SearchServiceHolder.fragmentManager
.push(
FragmentDescriptor.Builder().fragment(searchFragment)
.tag(MogoModulePaths.PATH_FRAGMENT_SEARCH)
.notifyMainModule(true)
.build()
)
} else if (key_type == 10005) {
// * 仅在导航场景下,⽀持第三⽅进⾏路线偏好的重新选择。 // * 仅在导航场景下,⽀持第三⽅进⾏路线偏好的重新选择。
// * `避免收费` |`1` `多策略算路` |`2` `不走高速` |`3` ` 躲避拥堵` |`4` `不走高速且避免收费` |`5` `不走高速且躲避拥堵` |`6` // * `避免收费` |`1` `多策略算路` |`2` `不走高速` |`3` ` 躲避拥堵` |`4` `不走高速且避免收费` |`5` `不走高速且躲避拥堵` |`6`
// * `躲避收费和拥堵` |`7` `不走高速躲避收费和拥堵` |`8` `高速优先` |`20` `躲避拥堵且高速优先` |`24` // * `躲避收费和拥堵` |`7` `不走高速躲避收费和拥堵` |`8` `高速优先` |`20` `躲避拥堵且高速优先` |`24`
// * // *
var prefer = intent.getIntExtra("NAVI_ROUTE_PREFER", 0) var prefer = intent.getIntExtra("NAVI_ROUTE_PREFER", 0)
var avoidSpeed = MogoNaviConfig().congestion(prefer == 4) var avoidSpeed = MogoNaviConfig().congestion(prefer == 4)
.cost(prefer == 1||prefer == 7) .cost(prefer == 1 || prefer == 7)
.highSpeed(prefer == 20) .highSpeed(prefer == 20)
.avoidSpeed(prefer == 3) .avoidSpeed(prefer == 3)
SearchServiceHolder.getNavi() SearchServiceHolder.getNavi().reCalculateRoute(avoidSpeed)
.reCalculateRoute(avoidSpeed)
} }
}
}
/**
* 打开地图
*/
private fun gotoSearch() {
AddressManager.goSearch()
}
/**
* 唤醒指令导航去哪里
*/
private fun choosePath(intent: Intent, type: Int) {
val lat: Double
val lon: Double
if (type == 10007) {
lat = intent.getDoubleExtra("ENTRY_LAT", 0.0)
lon = intent.getDoubleExtra("ENTRY_LON", 0.0)
} else {
lat = intent.getDoubleExtra("LAT", 0.0)
lon = intent.getDoubleExtra("LON", 0.0)
}
AddressManager.calculatePath(MogoLatLng(lat, lon))
}
} }
} val inputFilter = IntentFilter()
inputFilter.addAction(AUTONAVI_STANDARD_BROADCAST_RECV)
context.registerReceiver(mReceiver, inputFilter)
private fun showHome() {
val intent = Intent(Intent.ACTION_MAIN)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
intent.addCategory(Intent.CATEGORY_HOME)
context.startActivity(intent)
}
} }
val inputFilter = IntentFilter()
inputFilter.addAction(AUTONAVI_STANDARD_BROADCAST_RECV)
context.registerReceiver(mReceiver, inputFilter)
}
} }

View File

@@ -1,16 +1,11 @@
package com.mogo.module.navi.ui package com.mogo.module.navi.ui
import android.app.Activity
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.module.common.MogoModulePaths
import com.mogo.module.navi.R import com.mogo.module.navi.R
import com.mogo.module.navi.ui.base.BaseActivity import com.mogo.module.navi.ui.base.BaseActivity
@Route(path = MogoModulePaths.PATH_MODULE_NAV_ACTIVITY)
class NaviActivity : BaseActivity() { class NaviActivity : BaseActivity() {

View File

@@ -72,27 +72,4 @@ public abstract class BaseFragment extends Fragment {
Toast.makeText( mContext, msg, Toast.LENGTH_LONG ).show(); Toast.makeText( mContext, msg, Toast.LENGTH_LONG ).show();
} }
} }
protected void setMarkerStatus(boolean show){
SearchServiceHolder.INSTANCE.getStatusManager().setSearchUIShow(
MogoModulePaths.PATH_FRAGMENT_SEARCH_CATEGORY, show
);
}
/**
* 移动地图中心点到屏幕中心
*/
protected void moveMapToCenter(){
//SearchServiceHolder.INSTANCE.getMapUIController().setPointToCenter(0.5,0.5);
}
//mMogoMapUIController.setPointToCenter( 0.66145, 0.590688 );
/**
* 移动地图中心点到屏幕右侧
*/
protected void moveMapToRight(){
SearchServiceHolder.INSTANCE.getMapUIController().setPointToCenter(0.66145, 0.661094);
}
} }

View File

@@ -17,9 +17,13 @@ import com.mogo.map.marker.MogoMarkerOptions
import com.mogo.map.search.geo.MogoPoiItem import com.mogo.map.search.geo.MogoPoiItem
import com.mogo.map.search.inputtips.MogoTip import com.mogo.map.search.inputtips.MogoTip
import com.mogo.module.common.MogoModulePaths import com.mogo.module.common.MogoModulePaths
import com.mogo.module.common.map.MapCenterPointStrategy
import com.mogo.module.common.map.Scene
import com.mogo.module.navi.R import com.mogo.module.navi.R
import com.mogo.module.navi.bean.SearchPoi import com.mogo.module.navi.bean.SearchPoi
import com.mogo.module.navi.constants.AMapConstants
import com.mogo.module.navi.constants.SearchServiceHolder import com.mogo.module.navi.constants.SearchServiceHolder
import com.mogo.module.navi.manager.AddressManager
import com.mogo.module.navi.ui.adapter.SearchCategoryAdapter import com.mogo.module.navi.ui.adapter.SearchCategoryAdapter
import com.mogo.module.navi.ui.base.BaseFragment import com.mogo.module.navi.ui.base.BaseFragment
import com.mogo.module.navi.uitls.BitmapUtils import com.mogo.module.navi.uitls.BitmapUtils
@@ -175,9 +179,6 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
category = arguments?.getString("category") category = arguments?.getString("category")
SearchServiceHolder.statusManager.setSearchUIShow(
MogoModulePaths.PATH_FRAGMENT_SEARCH_CATEGORY, true
)
mSearchPresenter = CategoryPresenter(this) mSearchPresenter = CategoryPresenter(this)
lifecycle.addObserver(mSearchPresenter) lifecycle.addObserver(mSearchPresenter)
cmds = ArrayList<String>() cmds = ArrayList<String>()
@@ -223,8 +224,7 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa
private fun goPath() { private fun goPath() {
mAdapter.currentItem?.let { mAdapter.currentItem?.let {
var newInstance = ChoosePathFragment.newInstance(mAdapter.currentItem.point) AddressManager.calculatePath(mAdapter.currentItem.point)
SearchServiceHolder.push(newInstance, MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT)
} }
} }
@@ -279,13 +279,11 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
SearchServiceHolder.statusManager.setSearchUIShow(
MogoModulePaths.PATH_FRAGMENT_SEARCH_CATEGORY, false
)
} }
companion object { companion object {
fun newInstance(category: String): Fragment { fun newInstance(category: String): Fragment {
MapCenterPointStrategy.setMapCenterPointByScene(SearchServiceHolder.getMapUIController(), Scene.CATEGORY_SEARCH)
var bundle = Bundle() var bundle = Bundle()
bundle.putString("category", category) bundle.putString("category", category)
var categorySerachFragment = CategorySearchFragment() var categorySerachFragment = CategorySearchFragment()

View File

@@ -1,7 +1,5 @@
package com.mogo.module.navi.ui.search package com.mogo.module.navi.ui.search
import android.app.SearchManager
import android.app.Service
import android.os.Bundle import android.os.Bundle
import android.text.TextUtils import android.text.TextUtils
import android.view.View import android.view.View
@@ -14,15 +12,16 @@ import com.mogo.map.navi.IMogoNaviListener
import com.mogo.map.navi.MogoCalculatePath import com.mogo.map.navi.MogoCalculatePath
import com.mogo.map.navi.MogoNaviInfo import com.mogo.map.navi.MogoNaviInfo
import com.mogo.map.navi.MogoTraffic import com.mogo.map.navi.MogoTraffic
import com.mogo.map.search.inputtips.MogoTip
import com.mogo.module.common.MogoModulePaths import com.mogo.module.common.MogoModulePaths
import com.mogo.module.navi.BuildConfig import com.mogo.module.common.map.MapCenterPointStrategy
import com.mogo.module.common.map.Scene
import com.mogo.module.navi.R import com.mogo.module.navi.R
import com.mogo.module.navi.constants.AMapConstants import com.mogo.module.navi.constants.AMapConstants
import com.mogo.module.navi.constants.SearchServiceHolder import com.mogo.module.navi.constants.SearchServiceHolder
import com.mogo.module.navi.manager.SettingManager import com.mogo.module.navi.manager.SettingManager
import com.mogo.module.navi.ui.adapter.CalculatePathAdapter import com.mogo.module.navi.ui.adapter.CalculatePathAdapter
import com.mogo.module.navi.ui.base.BaseFragment import com.mogo.module.navi.ui.base.BaseFragment
import com.mogo.utils.UiThreadHandler
import kotlinx.android.synthetic.main.fragment_search_category.group_path import kotlinx.android.synthetic.main.fragment_search_category.group_path
import kotlinx.android.synthetic.main.fragment_search_category.pb_path import kotlinx.android.synthetic.main.fragment_search_category.pb_path
import kotlinx.android.synthetic.main.fragment_search_category.rv_search_result import kotlinx.android.synthetic.main.fragment_search_category.rv_search_result
@@ -35,263 +34,233 @@ import kotlinx.android.synthetic.main.include_search_bar.iv_navi_back
* 2020-01-09. * 2020-01-09.
*/ */
class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallBack { class ChoosePathFragment : BaseFragment(), IMogoNaviListener, IMogoVoiceCmdCallBack {
override fun onCmdSelected(cmd: String?) { override fun onCmdSelected(cmd: String?) {
when (cmd) { when (cmd) {
"firstPath" -> { "firstPath" -> {
selectItem(0) selectItem(0)
startNavi() startNavi()
} }
"secondPath" -> { "secondPath" -> {
selectItem(1) selectItem(1)
startNavi() startNavi()
} }
"thirdPath" -> { "thirdPath" -> {
selectItem(2) selectItem(2)
startNavi() startNavi()
} }
"startNavi" -> { "startNavi" -> {
startNavi() startNavi()
} }
"retry" -> { "retry" -> {
retry() retry()
} }
"cancel" -> { "cancel" -> {
SearchServiceHolder.fragmentManager SearchServiceHolder.fragmentManager.clearAll()
.clearAll() }
}
}
}
private fun selectItem(index: Int) {
if (mAdapter.list.size > index) {
selectPath(mAdapter.list[index])
}
}
override fun onCmdAction(speakText: String?) {
}
override fun onCmdCancel(speakText: String?) {
}
override fun onSpeakEnd(speakText: String?) {
}
override fun onSpeakSelectTimeOut(speakText: String?) {
}
override fun onInitNaviFailure() {
}
override fun onInitNaviSuccess() {
}
override fun onNaviInfoUpdate(naviinfo: MogoNaviInfo?) {
}
override fun onStartNavi() {
}
override fun onStopNavi() {
}
override fun onCalculateSuccess() {
var calculatedStrategies = SearchServiceHolder.getNavi()
.calculatedStrategies
if (calculatedStrategies != null && calculatedStrategies.size > 0) {
mAdapter.setDatas(calculatedStrategies)
mAdapter.selectTag = calculatedStrategies[0].tagId
}
AIAssist.getInstance(context)
.speakTTSVoice(String.format("已为你规划处%d条路线请选择", calculatedStrategies.size))
pb_path.visibility = View.GONE
group_path.visibility = View.GONE
tv_navi_navi.text = getString(R.string.start_navi)
unregisterRetryVoice()
}
override fun onoCalculateFailed() {
group_path.visibility = View.VISIBLE
tv_navi_navi.text = "重试"
pb_path.visibility = View.GONE
registerRetryVoice()
}
override fun onUpdateTraffic(traffic: MogoTraffic?) {
}
private lateinit var mAdapter: CalculatePathAdapter
override fun getLayoutId(): Int {
return R.layout.fragment_search_category
}
val firstPath: String = "第一个"
val secondPath: String = "第二个"
val thirdPath: String = "第三个"
val startNavi: String = "开始导航"
var mogoTip: MogoLatLng? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mogoTip = arguments?.getParcelable<MogoLatLng>(AMapConstants.KEY_PARCELABLE)
SearchServiceHolder.statusManager.setSearchUIShow(
MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT, true
)
}
// 是否开启导航
var isStartedNavi = false
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?
) {
super.onViewCreated(view, savedInstanceState)
iv_navi_back.setOnClickListener {
SearchServiceHolder.fragmentManager.pop()
}
tv_navi_navi.text = getString(R.string.start_navi)
et_navi_search.setText(getString(R.string.choose_path))
et_navi_search.isEnabled = false
SearchServiceHolder.getNavi()
.naviTo(mogoTip)
SearchServiceHolder.listenerCenter.registerMogoNaviListener(
MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT, this
)
var arrayList = ArrayList<MogoCalculatePath>()
mAdapter = CalculatePathAdapter(activity, arrayList)
rv_search_result.layoutManager =
LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
rv_search_result.adapter = mAdapter
tv_navi_navi.setOnClickListener {
if (group_path.visibility == View.VISIBLE) {
retry()
} else {
startNavi()
}
}
SearchServiceHolder.getNavi()
.setLineClickInteraction {
mAdapter.setSelectTag(it)
} }
mAdapter.setOnClickListener { }
var item = it.getTag(R.id.tag_item) as MogoCalculatePath
selectPath(item)
// rv_search_result.scroto private fun selectItem(index: Int) {
if (mAdapter.list.size > index) {
selectPath(mAdapter.list[index])
}
}
override fun onCmdAction(speakText: String?) {
}
override fun onCmdCancel(speakText: String?) {
}
override fun onSpeakEnd(speakText: String?) {
}
override fun onSpeakSelectTimeOut(speakText: String?) {
}
override fun onInitNaviFailure() {
}
override fun onInitNaviSuccess() {
}
override fun onNaviInfoUpdate(naviinfo: MogoNaviInfo?) {
}
override fun onStartNavi() {
}
override fun onStopNavi() {
}
override fun onCalculateSuccess() {
var calculatedStrategies = SearchServiceHolder.getNavi().calculatedStrategies
if (calculatedStrategies != null && calculatedStrategies.size > 0) {
mAdapter.setDatas(calculatedStrategies)
mAdapter.selectTag = calculatedStrategies[0].tagId
UiThreadHandler.postDelayed( {
SearchServiceHolder.getNavi().itemClickInteraction.onItemClicked(calculatedStrategies[0].tagId)
}, 500L)
}
AIAssist.getInstance(context).speakTTSVoice(String.format("已为你规划处%d条路线请选择", calculatedStrategies.size))
pb_path.visibility = View.GONE
group_path.visibility = View.GONE
tv_navi_navi.text = getString(R.string.start_navi)
unregisterRetryVoice()
} }
SearchServiceHolder.getMarkerManger() override fun onoCalculateFailed() {
.removeMarkers() group_path.visibility = View.VISIBLE
tv_navi_navi.text = "重试"
pb_path.visibility = View.GONE
AIAssist.getInstance(context) registerRetryVoice()
.registerUnWakeupCommand("firstPath", arrayOf<String>(firstPath), this)
AIAssist.getInstance(context)
.registerUnWakeupCommand("secondPath", arrayOf<String>(secondPath), this)
AIAssist.getInstance(context)
.registerUnWakeupCommand("thirdPath", arrayOf<String>(thirdPath), this)
AIAssist.getInstance(context)
.registerUnWakeupCommand("startNavi", arrayOf<String>(startNavi,"开始"), this)
}
private fun registerRetryVoice() {
AIAssist.getInstance(context)
.registerUnWakeupCommand("retry", arrayOf<String>("重试"), this)
}
private fun unregisterRetryVoice() {
AIAssist.getInstance(context)
.unregisterUnWakeupCommand("retry")
}
private fun retry() {
SearchServiceHolder.getNavi()
.naviTo(mogoTip)
pb_path.visibility = View.VISIBLE
group_path.visibility = View.GONE
}
private fun startNavi() {
if (TextUtils.isEmpty(mAdapter.selectTag)) {
return
}
moveMapToRight()
SearchServiceHolder.getNavi()
.startNavi(!SettingManager.isMonitor())
SearchServiceHolder.getMapUIController()
.recoverLockMode()
if (SearchServiceHolder.guideShowProvider.isPlayingVideo()) {
SearchServiceHolder.guideShowProvider.closeGuideShowView()
}
isStartedNavi = true
SearchServiceHolder.fragmentManager.clearAll()
}
private fun selectPath(item: MogoCalculatePath?) {
item?.let {
mAdapter.setSelectTag(item.tagId)
SearchServiceHolder.getNavi()
.itemClickInteraction.onItemClicked(item.tagId)
}
}
override fun onDestroyView() {
super.onDestroyView()
SearchServiceHolder.listenerCenter.unregisterMogoNaviListener(
MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT
)
SearchServiceHolder.statusManager.setSearchUIShow(
MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT, false
)
if (!isStartedNavi) {
SearchServiceHolder.getNavi()
.clearCalculatePaths()
} }
override fun onUpdateTraffic(traffic: MogoTraffic?) {
AIAssist.getInstance(context) }
.unregisterUnWakeupCommand("firstPath")
AIAssist.getInstance(context) private lateinit var mAdapter: CalculatePathAdapter
.unregisterUnWakeupCommand("secondPath") override fun getLayoutId(): Int {
AIAssist.getInstance(context) return R.layout.fragment_search_category
.unregisterUnWakeupCommand("thirdPath") }
AIAssist.getInstance(context)
.unregisterUnWakeupCommand("startNavi") val firstPath: String = "第一个"
val secondPath: String = "第二个"
} val thirdPath: String = "第三个"
val startNavi: String = "开始导航"
companion object {
fun newInstance(searchPoi: MogoLatLng): Fragment { var mogoTip: MogoLatLng? = null
var bundle = Bundle() override fun onCreate(savedInstanceState: Bundle?) {
bundle.putParcelable(AMapConstants.KEY_PARCELABLE, searchPoi) super.onCreate(savedInstanceState)
var choosePathFragment = ChoosePathFragment() mogoTip = arguments?.getParcelable<MogoLatLng>(AMapConstants.KEY_PARCELABLE)
choosePathFragment.arguments = bundle
return choosePathFragment }
// 是否开启导航
var isStartedNavi = false
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
iv_navi_back.setOnClickListener {
SearchServiceHolder.fragmentManager.pop()
}
tv_navi_navi.text = getString(R.string.start_navi)
et_navi_search.setText(getString(R.string.choose_path))
et_navi_search.isEnabled = false
SearchServiceHolder.getNavi()
.naviTo(mogoTip)
SearchServiceHolder.listenerCenter.registerMogoNaviListener(AMapConstants.PATH_FRAGMENT_CHOOSE_PATH, this)
var arrayList = ArrayList<MogoCalculatePath>()
mAdapter = CalculatePathAdapter(activity, arrayList)
rv_search_result.layoutManager =
LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
rv_search_result.adapter = mAdapter
tv_navi_navi.setOnClickListener {
if (group_path.visibility == View.VISIBLE) {
retry()
} else {
startNavi()
}
}
SearchServiceHolder.getNavi().setLineClickInteraction {
mAdapter.selectTag = it
}
mAdapter.setOnClickListener {
var item = it.getTag(R.id.tag_item) as MogoCalculatePath
selectPath(item)
}
SearchServiceHolder.getMarkerManger().removeMarkers()
AIAssist.getInstance(context).registerUnWakeupCommand("firstPath", arrayOf<String>(firstPath), this)
AIAssist.getInstance(context).registerUnWakeupCommand("secondPath", arrayOf<String>(secondPath), this)
AIAssist.getInstance(context).registerUnWakeupCommand("thirdPath", arrayOf<String>(thirdPath), this)
AIAssist.getInstance(context).registerUnWakeupCommand("startNavi", arrayOf<String>(startNavi, "开始"), this)
}
private fun registerRetryVoice() {
AIAssist.getInstance(context).registerUnWakeupCommand("retry", arrayOf<String>("重试"), this)
}
private fun unregisterRetryVoice() {
AIAssist.getInstance(context).unregisterUnWakeupCommand("retry")
}
private fun retry() {
SearchServiceHolder.getNavi().naviTo(mogoTip)
pb_path.visibility = View.VISIBLE
group_path.visibility = View.GONE
}
private fun startNavi() {
if (TextUtils.isEmpty(mAdapter.selectTag)) {
return
}
// moveMapToRight()
SearchServiceHolder.getNavi().startNavi(!SettingManager.isMonitor())
SearchServiceHolder.getMapUIController().recoverLockMode()
if (SearchServiceHolder.guideShowProvider.isPlayingVideo()) {
SearchServiceHolder.guideShowProvider.closeGuideShowView()
}
isStartedNavi = true
SearchServiceHolder.fragmentManager.clearAll()
}
private fun selectPath(item: MogoCalculatePath?) {
item?.let {
mAdapter.setSelectTag(item.tagId)
SearchServiceHolder.getNavi().itemClickInteraction.onItemClicked(item.tagId)
}
}
override fun onDestroyView() {
super.onDestroyView()
SearchServiceHolder.listenerCenter.unregisterMogoNaviListener(AMapConstants.PATH_FRAGMENT_CHOOSE_PATH)
if (!isStartedNavi) {
SearchServiceHolder.getNavi().clearCalculatePaths()
}
AIAssist.getInstance(context).unregisterUnWakeupCommand("firstPath")
AIAssist.getInstance(context).unregisterUnWakeupCommand("secondPath")
AIAssist.getInstance(context).unregisterUnWakeupCommand("thirdPath")
AIAssist.getInstance(context).unregisterUnWakeupCommand("startNavi")
}
companion object {
fun newInstance(searchPoi: MogoLatLng): Fragment {
MapCenterPointStrategy.setMapCenterPointByScene(SearchServiceHolder.getMapUIController(), Scene.CALCULATE_PATH)
var bundle = Bundle()
bundle.putParcelable(AMapConstants.KEY_PARCELABLE, searchPoi)
var choosePathFragment = ChoosePathFragment()
choosePathFragment.arguments = bundle
return choosePathFragment
}
} }
}
} }

View File

@@ -20,6 +20,7 @@ import com.mogo.module.common.MogoModulePaths;
import com.mogo.module.navi.R; import com.mogo.module.navi.R;
import com.mogo.module.navi.bean.EntityConvertUtils; import com.mogo.module.navi.bean.EntityConvertUtils;
import com.mogo.module.navi.bean.SearchPoi; import com.mogo.module.navi.bean.SearchPoi;
import com.mogo.module.navi.constants.AMapConstants;
import com.mogo.module.navi.manager.AddressManager; import com.mogo.module.navi.manager.AddressManager;
import com.mogo.module.navi.constants.SearchServiceHolder; import com.mogo.module.navi.constants.SearchServiceHolder;
import com.mogo.module.navi.ui.adapter.HistoryPoiAdapter; import com.mogo.module.navi.ui.adapter.HistoryPoiAdapter;
@@ -43,7 +44,6 @@ import java.util.List;
* {@link SearchConstants#SEARCH_TYPE_MULTI_COMPANY} * {@link SearchConstants#SEARCH_TYPE_MULTI_COMPANY}
* {@link SearchConstants#SEARCH_TYPE_MULTI_HOME} * {@link SearchConstants#SEARCH_TYPE_MULTI_HOME}
*/ */
@Route(path = MogoModulePaths.PATH_FRAGMENT_SEARCH)
public class SearchFragment extends BaseSearchFragment public class SearchFragment extends BaseSearchFragment
implements SearchView, View.OnClickListener, IMogoVoiceCmdCallBack, implements SearchView, View.OnClickListener, IMogoVoiceCmdCallBack,
FragmentStackTransactionListener { FragmentStackTransactionListener {
@@ -92,7 +92,6 @@ public class SearchFragment extends BaseSearchFragment
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
SearchServiceHolder.INSTANCE.getMarkerManger().removeMarkers(); SearchServiceHolder.INSTANCE.getMarkerManger().removeMarkers();
SearchServiceHolder.INSTANCE.getMapUIController().showMyLocation(false); SearchServiceHolder.INSTANCE.getMapUIController().showMyLocation(false);
moveMapToCenter();
} }
@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
@@ -186,24 +185,18 @@ public class SearchFragment extends BaseSearchFragment
goCategory(tag.getName()); goCategory(tag.getName());
} else { } else {
mSearchPresenter.insert(searchPoi); mSearchPresenter.insert(searchPoi);
SearchServiceHolder.INSTANCE.push( AddressManager.INSTANCE.calculatePath( tag.getPoint() );
ChoosePathFragment.Companion.newInstance(tag.getPoint()),
MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT);
} }
} }
private void goSetting() { private void goSetting() {
SearchServiceHolder.INSTANCE.getAnalyticsManager() SearchServiceHolder.INSTANCE.getAnalyticsManager().track("Navigation_button_setting", new HashMap<String, Object>());
.track("Navigation_button_setting", new HashMap<String, Object>()); AddressManager.INSTANCE.goSettings();
push(new NaviSettingFragment(), MogoModulePaths.PATH_FRAGMENT_SETTING);
} }
private void goHistory(SearchPoi item) { private void goHistory(SearchPoi item) {
MogoTip mogoTip = EntityConvertUtils.poi2MogoTip(item); MogoTip mogoTip = EntityConvertUtils.poi2MogoTip(item);
SearchServiceHolder.INSTANCE.push( AddressManager.INSTANCE.calculatePath( mogoTip.getPoint() );
ChoosePathFragment.Companion.newInstance(mogoTip.getPoint()),
MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT);
} }
private static final String GO_HOME_CMD = "goHome"; private static final String GO_HOME_CMD = "goHome";
@@ -501,8 +494,7 @@ public class SearchFragment extends BaseSearchFragment
} }
private void goCategory(String text) { private void goCategory(String text) {
push(CategorySearchFragment.Companion.newInstance(text), AddressManager.INSTANCE.categorySearch( text );
MogoModulePaths.PATH_FRAGMENT_SEARCH_CATEGORY);
} }
@Override public void onResume() { @Override public void onResume() {
@@ -517,7 +509,7 @@ public class SearchFragment extends BaseSearchFragment
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
SearchServiceHolder.INSTANCE.getMapUIController().showMyLocation(true); SearchServiceHolder.INSTANCE.getMapUIController().showMyLocation(true);
moveMapToRight(); // moveMapToRight();
unRegisterVoice(); unRegisterVoice();
} }

View File

@@ -1,92 +0,0 @@
package com.mogo.module.navi.ui.search;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.map.listener.IMogoMapListener;
import com.mogo.map.location.IMogoLocationListener;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.module.common.MogoModulePaths;
import com.mogo.service.module.IMogoModuleLifecycle;
import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.service.module.ModuleType;
/**
* @author congtaowang
* @since 2019-12-30
* <p>
* 描述
*/
@Route( path = MogoModulePaths.PATH_MODULE_SEARCH )
public class SearchFragmentProvider implements IMogoModuleProvider {
private SearchFragment mAppsFragment;
@Override
public Fragment createFragment( Context context, Bundle data ) {
mAppsFragment = new SearchFragment();
mAppsFragment.setArguments( data );
return mAppsFragment;
}
@Override
public View createView( Context context ) {
return null;
}
@NonNull
@Override
public String getModuleName() {
return MogoModulePaths.PATH_MODULE_SEARCH;
}
@Override
public IMogoModuleLifecycle getCardLifecycle() {
return null;
}
@Override
public IMogoMapListener getMapListener() {
return null;
}
@Override
public int getType() {
return ModuleType.TYPE_NAVI;
}
@Override
public IMogoNaviListener getNaviListener() {
return null;
}
@Override
public IMogoLocationListener getLocationListener() {
return null;
}
@Override
public void init( Context context ) {
}
@Override
public IMogoMarkerClickListener getMarkerClickListener() {
return null;
}
@Override
public String getAppPackage() {
return null;
}
@Override
public String getAppName() {
return null;
}
}

View File

@@ -30,7 +30,6 @@ import org.greenrobot.eventbus.ThreadMode
* @author zyz * @author zyz
* 2020-01-07. * 2020-01-07.
*/ */
@Route(path = MogoModulePaths.PATH_FRAGMENT_SETTING)
class NaviSettingFragment : BaseFragment(), OnCheckedChangeListener { class NaviSettingFragment : BaseFragment(), OnCheckedChangeListener {
private var type: Int = 0 private var type: Int = 0

View File

@@ -17,6 +17,8 @@ import com.mogo.map.search.geo.MogoRegeocodeResult
import com.mogo.map.search.geo.query.MogoRegeocodeQuery import com.mogo.map.search.geo.query.MogoRegeocodeQuery
import com.mogo.module.common.MogoModulePaths import com.mogo.module.common.MogoModulePaths
import com.mogo.module.common.adapter.MogoMapListenerAdapter import com.mogo.module.common.adapter.MogoMapListenerAdapter
import com.mogo.module.common.map.MapCenterPointStrategy
import com.mogo.module.common.map.Scene
import com.mogo.module.navi.R import com.mogo.module.navi.R
import com.mogo.module.navi.R.string import com.mogo.module.navi.R.string
import com.mogo.module.navi.bean.EntityConvertUtils import com.mogo.module.navi.bean.EntityConvertUtils
@@ -40,7 +42,6 @@ import kotlinx.android.synthetic.main.fragment_setting_address.tv_set_as_home
* @author zyz * @author zyz
* 2020-01-07. * 2020-01-07.
*/ */
@Route(path = MogoModulePaths.PATH_FRAGMENT_SETTING_HOME)
class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener { class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
override fun onRegeocodeSearched(regeocodeResult: MogoRegeocodeResult?) { override fun onRegeocodeSearched(regeocodeResult: MogoRegeocodeResult?) {
et_navi_search.setText(regeocodeResult?.regeocodeAddress?.formatAddress) et_navi_search.setText(regeocodeResult?.regeocodeAddress?.formatAddress)
@@ -97,22 +98,14 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
style = arguments?.getInt(AMapConstants.KEY_SET_HOME_COMPONY) ?: DataConstants.TYPE_HOME_ADDRESS style = arguments?.getInt(AMapConstants.KEY_SET_HOME_COMPONY) ?: DataConstants.TYPE_HOME_ADDRESS
setMarkerStatus(true)
SearchServiceHolder.listenerCenter.registerMogoMapListener( SearchServiceHolder.listenerCenter.registerMogoMapListener(
MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, mapListener AMapConstants.PATH_FRAGMENT_SETTING_HOME, mapListener
) )
SearchServiceHolder.getMapUIController() SearchServiceHolder.getMapUIController().showMyLocation(false)
.showMyLocation(false)
SearchServiceHolder.getGeoSearcher() SearchServiceHolder.getGeoSearcher().setGeoSearchListener(this)
.setGeoSearchListener(this)
SearchServiceHolder.statusManager.setSearchUIShow( SearchServiceHolder.getMarkerManger().removeMarkers()
MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, true
)
SearchServiceHolder.getMarkerManger()
.removeMarkers()
} }
override fun getLayoutId(): Int { override fun getLayoutId(): Int {
@@ -155,9 +148,8 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
et_navi_search.isEnabled = false et_navi_search.isEnabled = false
et_navi_search.setText(getString(string.drag_map_to_choose)) et_navi_search.setText(getString(string.drag_map_to_choose))
var location = SearchServiceHolder.getMapUIController() var location = SearchServiceHolder.getMapUIController().windowCenterLocation
.windowCenterLocation
moveMapToCenter()
UiThreadHandler.postDelayed({ UiThreadHandler.postDelayed({
if (!isAdded) { if (!isAdded) {
return@postDelayed return@postDelayed
@@ -170,10 +162,9 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
.anchor(0.5f, 1f) .anchor(0.5f, 1f)
.longitude(location?.lng ?: 0.0) .longitude(location?.lng ?: 0.0)
addMarker = SearchServiceHolder.getMarkerManger() addMarker = SearchServiceHolder.getMarkerManger()
.addMarker(MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, options) .addMarker(AMapConstants.PATH_FRAGMENT_SETTING_HOME, options)
var locationPointInScreen = SearchServiceHolder.getMapUIController() var locationPointInScreen = SearchServiceHolder.getMapUIController().getLocationPointInScreen(location)
.getLocationPointInScreen(location)
addMarker?.setPositionByPixels(locationPointInScreen) addMarker?.setPositionByPixels(locationPointInScreen)
}, 500L) }, 500L)
} }
@@ -190,31 +181,14 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
}) })
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.subscribe() .subscribe()
} }
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
// setMarkerStatus(true)
// SearchServiceHolder.getMapUIController()
// .showMyLocation(true)
SearchServiceHolder.listenerCenter.unregisterMogoMapListener( SearchServiceHolder.listenerCenter.unregisterMogoMapListener(
MogoModulePaths.PATH_FRAGMENT_SETTING_HOME AMapConstants.PATH_FRAGMENT_SETTING_HOME
) )
addMarker?.destroy() addMarker?.destroy()
SearchServiceHolder.statusManager.setSearchUIShow(
MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, false
)
if (SearchServiceHolder.fragmentManager.stackSize == 0) {
moveMapToRight()
SearchServiceHolder.getMapUIController()
.showMyLocation(true)
}
// moveMapToRight()
} }
companion object { companion object {

View File

@@ -1,7 +1,5 @@
package com.mogo.module.service; package com.mogo.module.service;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
@@ -36,6 +34,8 @@ import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.MogoModule; import com.mogo.module.common.MogoModule;
import com.mogo.module.common.MogoModulePaths; 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.carinfo.CarStateInfo;
import com.mogo.module.service.marker.MapMarkerManager; import com.mogo.module.service.marker.MapMarkerManager;
import com.mogo.module.service.network.RefreshCallback; import com.mogo.module.service.network.RefreshCallback;
@@ -966,19 +966,18 @@ public class MogoServices implements IMogoMapListener,
if ( size == 0 ) { if ( size == 0 ) {
mUiController.showMyLocation( !mNavi.isNaviing() ); mUiController.showMyLocation( !mNavi.isNaviing() );
AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ServiceConst.CMD_BACK ); AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ServiceConst.CMD_BACK );
// 控制SearchUIShow 打点逻辑 if ( mStatusManager.isSearchUIShow() ) {
mStatusManager.setSearchUIShow( TAG, false ); mStatusManager.setSearchUIShow( TAG, false );
}
if ( mNavi.isNaviing() ) { if ( mNavi.isNaviing() ) {
mUiController.setPointToCenter( 0.675926, 0.77552 ); MapCenterPointStrategy.setMapCenterPointByScene(mUiController, Scene.NAVI );
} else { } else {
mUiController.setPointToCenter( 0.66145, 0.661094 ); MapCenterPointStrategy.setMapCenterPointByScene(mUiController, Scene.AIMLESS );
} }
mUiController.recoverLockMode(); mUiController.recoverLockMode();
} else { } else {
mUiController.showMyLocation( false ); mUiController.showMyLocation( false );
AIAssist.getInstance( mContext ).registerUnWakeupCommand( ServiceConst.CMD_BACK, ServiceConst.CMD_BACK_WORDS, this ); AIAssist.getInstance( mContext ).registerUnWakeupCommand( ServiceConst.CMD_BACK, ServiceConst.CMD_BACK_WORDS, this );
mStatusManager.setSearchUIShow( TAG, true );
mUiController.setPointToCenter( 0.5, 0.5 );
} }
} }
} }

View File

@@ -1,6 +1,7 @@
package com.mogo.service.module; package com.mogo.service.module;
import com.alibaba.android.arouter.facade.template.IProvider; import com.alibaba.android.arouter.facade.template.IProvider;
import com.mogo.map.MogoLatLng;
/** /**
* @author zyz * @author zyz
@@ -8,6 +9,32 @@ import com.alibaba.android.arouter.facade.template.IProvider;
*/ */
public interface IMogoAddressManager extends IProvider { public interface IMogoAddressManager extends IProvider {
/**
* 回家
*/
void goHome(); void goHome();
/**
* 去公司
*/
void goCompany(); void goCompany();
/**
* 打开搜索
*/
void goSearch();
/**
* 规划路线
*
* @param destination 目的地
*/
void calculatePath( MogoLatLng destination );
/**
* 分类搜索
*/
void categorySearch(String category);
void goSettings();
} }

View File

@@ -84,6 +84,12 @@ public interface IMogoStatusManager extends IProvider {
*/ */
boolean isAIAssistReady(); boolean isAIAssistReady();
/**
* 求助状态
* @return
*/
boolean isSeekHelping();
/** /**
* 设置小智语音UI状态 * 设置小智语音UI状态
* *
@@ -166,6 +172,13 @@ public interface IMogoStatusManager extends IProvider {
*/ */
void setAIAssistReady( String tag, boolean ready ); void setAIAssistReady( String tag, boolean ready );
/**
* 设置求助状态
* @param tag
* @param seekHelping
*/
void setSeekHelping(String tag, boolean seekHelping);
/** /**
* 注册监听 * 注册监听
* *

View File

@@ -59,5 +59,10 @@ public enum StatusDescriptor {
/** /**
* 小智语音状态 * 小智语音状态
*/ */
AI_ASSIST_READY; AI_ASSIST_READY,
/**
* 求助状态
*/
SEEK_HELPING;
} }

View File

@@ -99,6 +99,12 @@ public class MogoStatusManager implements IMogoStatusManager {
return get_bool_val( StatusDescriptor.AI_ASSIST_READY ); return get_bool_val( StatusDescriptor.AI_ASSIST_READY );
} }
@Override
public boolean isSeekHelping() {
return get_bool_val( StatusDescriptor.SEEK_HELPING );
}
private boolean get_bool_val( StatusDescriptor descriptor ) { private boolean get_bool_val( StatusDescriptor descriptor ) {
Boolean val = mStatus.get( descriptor ); Boolean val = mStatus.get( descriptor );
return val == null ? false : val; return val == null ? false : val;
@@ -177,6 +183,13 @@ public class MogoStatusManager implements IMogoStatusManager {
recordStatusModifier( tag, StatusDescriptor.AI_ASSIST_READY ); recordStatusModifier( tag, StatusDescriptor.AI_ASSIST_READY );
} }
@Override
public void setSeekHelping( String tag, boolean seekHelping ) {
mStatus.put( StatusDescriptor.SEEK_HELPING, seekHelping );
invokeStatusChangedListener( StatusDescriptor.SEEK_HELPING, seekHelping );
recordStatusModifier( tag, StatusDescriptor.SEEK_HELPING );
}
private void invokeStatusChangedListener( StatusDescriptor descriptor, boolean status ) { private void invokeStatusChangedListener( StatusDescriptor descriptor, boolean status ) {
if ( mListeners.containsKey( descriptor ) ) { if ( mListeners.containsKey( descriptor ) ) {
Iterator< IMogoStatusChangedListener > iterator = mListeners.get( descriptor ).iterator(); Iterator< IMogoStatusChangedListener > iterator = mListeners.get( descriptor ).iterator();