This commit is contained in:
wangcongtao
2020-01-05 16:24:07 +08:00
parent a0aa63b89b
commit 323376dcec
77 changed files with 2518 additions and 567 deletions

View File

@@ -13,15 +13,20 @@ import com.mogo.map.location.IMogoLocationListener;
import com.mogo.map.location.MogoLocation;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.module.common.MogoModule;
import com.mogo.module.common.MogoModulePaths;
import com.mogo.module.extensions.ExtensionsModuleConst;
import com.mogo.module.main.cards.CardModulesAdapter;
import com.mogo.module.main.cards.MogoModulesHandler;
import com.mogo.module.main.cards.MogoModulesManager;
import com.mogo.module.main.cards.OrientedViewPager;
import com.mogo.module.main.cards.VerticalStackTransformer;
import com.mogo.module.service.ServiceConst;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.connection.IMogoSocketManager;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.service.module.ModuleType;
import com.mogo.utils.logger.Logger;
import java.util.List;
@@ -99,11 +104,20 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
protected void onCreate( @Nullable Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
MogoModulePaths.addModule( new MogoModule( MogoModulePaths.PATH_MODULE_APPS, MogoModulePaths.PATH_MODULE_APPS ) );
MogoModulePaths.addModule( new MogoModule( MogoModulePaths.PATH_MODULE_MAP, MogoModulePaths.PATH_MODULE_MAP ) );
MogoModulePaths.addModule( new MogoModule( ServiceConst.PATH_REFRESH_STRATEGY, ServiceConst.PATH_REFRESH_STRATEGY ) );
MogoModulePaths.addModule( new MogoModule( ExtensionsModuleConst.PATH_EXTENSION, ExtensionsModuleConst.TYPE ) );
mMogoModuleHandler = new MogoModulesManager( this );
mMogoMapService = ( IMogoMapService ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICES_MAP ).navigation();
if ( mMogoMapService != null ) {
mMogoMapService.getHostListenerRegister().registerHostMapListener( mMogoModuleHandler );
mMogoMapService.getHostListenerRegister().registerHostNaviListener( mMogoModuleHandler );
mMogoMapService.getHostListenerRegister().registerMarkerClickListener( this );
}
mMogoSocketManager = ( IMogoSocketManager ) ARouter.getInstance().build( MogoServicePaths.PATH_SOCKET_MANAGER ).navigation();
mMogoSocketManager.init( getApplicationContext(), AppConstants.SOCKET_APP_ID );
mMogoModuleHandler.loadModules();
mMogoModuleHandler.onMapLoadedCallback( new Runnable() {
@Override
public void run() {
@@ -111,23 +125,17 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
loadModules();
}
} );
mMogoMapService = ( IMogoMapService ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICES_MAP ).navigation();
if ( mMogoMapService != null ) {
mMogoMapService.getHostListenerRegister().registerHostMapListener( mMogoModuleHandler );
mMogoMapService.getHostListenerRegister().registerHostNaviListener( mMogoModuleHandler );
mMogoMapService.getHostListenerRegister().registerMarkerClickListener( this );
}
// 加载地图,触发地图加载完毕回调,在初始化其他卡片模块,保证卡片模块可以正确获取地图相关服务。
mMogoModuleHandler.loadMap( R.id.module_main_id_map_fragment_container );
mMogoModuleHandler.loadAppsList( R.id.module_main_id_fragment_container );
mMogoModuleHandler.loadExtensions( R.id.module_main_id_ai_fragment_container );
mLocationClient = mMogoMapService.getSingletonLocationClient( getApplicationContext() );
mLocationClient.addLocationListener( this );
mLocationClient.start();
mMogoModuleHandler.loadService();
mMogoModuleHandler.loadAppsList( R.id.module_main_id_fragment_container );
mMogoSocketManager = ( IMogoSocketManager ) ARouter.getInstance().build( MogoServicePaths.PATH_SOCKET_MANAGER ).navigation();
mMogoSocketManager.init( getApplicationContext(), AppConstants.SOCKET_APP_ID );
}
private void loadModules() {

View File

@@ -24,6 +24,8 @@ public interface MogoModulesHandler extends IMogoMapListener,
void onMapLoadedCallback( Runnable callback );
void loadModules();
/**
* 加载卡片
*
@@ -31,20 +33,6 @@ public interface MogoModulesHandler extends IMogoMapListener,
*/
List< IMogoModuleProvider > loadCardsModule();
/**
* 加载小智语音
*
* @param containerId 容器id
*/
void loadAIAssist( int containerId );
/**
* 加载天气
*
* @param containerId 容器id
*/
void loadWeather( int containerId );
/**
* 加载地图
*
@@ -59,6 +47,13 @@ public interface MogoModulesHandler extends IMogoMapListener,
*/
void loadAppsList( int containerId );
/**
* 加载头部信息
*
* @param containerId
*/
void loadExtensions( int containerId );
/**
* 设置某一个module可用
*
@@ -66,11 +61,6 @@ public interface MogoModulesHandler extends IMogoMapListener,
*/
void setEnable( String module );
/**
* 加载服务
*/
void loadService();
/**
* 销毁
*/

View File

@@ -25,6 +25,7 @@ import com.mogo.module.main.receiver.MogoReceiver;
import com.mogo.module.service.ServiceConst;
import com.mogo.service.module.IMogoModuleLifecycle;
import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.service.module.ModuleType;
import com.mogo.utils.ResourcesHelper;
import com.mogo.utils.logger.Logger;
@@ -49,11 +50,7 @@ public class MogoModulesManager implements MogoModulesHandler,
private MainActivity mActivity;
private final Map< String, IMogoModuleProvider > mCardProviders = new HashMap<>();
private IMogoModuleProvider mMapProvider;
private IMogoModuleProvider mAppsListProvider;
private IMogoModuleProvider mPushProvider;
private IMogoModuleProvider mRefreshStrategyProvider;
private Map< MogoModule, IMogoModuleProvider > mModuleProviders = new HashMap<>();
private String mEnableModuleName = null;
private Runnable mMapLoadedCallback;
@@ -76,6 +73,19 @@ public class MogoModulesManager implements MogoModulesHandler,
return mActivity.getApplicationContext();
}
@Override
public void loadModules() {
final List< MogoModule > modules = MogoModulePaths.getModules();
if ( modules != null && !modules.isEmpty() ) {
for ( MogoModule module : modules ) {
IMogoModuleProvider provider = load( module.getPath() );
if ( provider != null ) {
mModuleProviders.put( module, provider );
}
}
}
}
@Override
public void onMapLoadedCallback( Runnable callback ) {
mMapLoadedCallback = callback;
@@ -83,42 +93,40 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public List< IMogoModuleProvider > loadCardsModule() {
final List< MogoModule > modules = MogoModulePaths.getModules();
final ArrayList< IMogoModuleProvider > providers = new ArrayList<>();
if ( modules != null && !modules.isEmpty() ) {
for ( MogoModule module : modules ) {
IMogoModuleProvider provider = load( module.getPath() );
providers.add( provider );
mCardProviders.put( provider.getModuleName(), provider );
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getType() == ModuleType.TYPE_CARD_FRAGMENT ) {
providers.add( value );
}
}
return providers;
}
@Override
public void loadAIAssist( int containerId ) {
}
@Override
public void loadWeather( int containerId ) {
}
private IMogoModuleProvider getModuleProvider( String tag ) {
return mCardProviders.get( tag );
}
@Override
public void loadMap( int containerId ) {
mMapProvider = load( MogoModulePaths.PATH_MODULE_MAP );
addFragment( mMapProvider, containerId );
loadModuleByType( ModuleType.TYPE_MAP, containerId );
}
@Override
public void loadAppsList( int containerId ) {
mAppsListProvider = load( MogoModulePaths.PATH_MODULE_APPS );
addFragment( mAppsListProvider, containerId );
loadModuleByType( ModuleType.TYPE_APP_LIST, containerId );
}
@Override
public void loadExtensions( int containerId ) {
loadModuleByType( ModuleType.TYPE_EXTENSION, containerId );
}
private void loadModuleByType( int type, int containerId ) {
if ( mModuleProviders.isEmpty() ) {
return;
}
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getType() == type ) {
addFragment( value, containerId );
return;
}
}
}
private IMogoModuleProvider load( String path ) {
@@ -140,23 +148,21 @@ public class MogoModulesManager implements MogoModulesHandler,
.commitAllowingStateLoss();
}
@Override
public void loadService() {
mPushProvider = ( IMogoModuleProvider ) ARouter.getInstance().build( "/push/ui" ).navigation( mActivity.getApplicationContext() );
mRefreshStrategyProvider = ( IMogoModuleProvider ) ARouter.getInstance().build( ServiceConst.PATH_REFRESH_STRATEGY ).navigation( mActivity.getApplicationContext() );
}
@Override
public void setEnable( String module ) {
mEnableModuleName = module;
final Set< Map.Entry< String, IMogoModuleProvider > > entries = mCardProviders.entrySet();
final Set< Map.Entry< MogoModule, IMogoModuleProvider > > entries = mModuleProviders.entrySet();
if ( !entries.isEmpty() ) {
for ( Map.Entry< String, IMogoModuleProvider > entry : entries ) {
final String key = entry.getKey();
for ( Map.Entry< MogoModule, IMogoModuleProvider > entry : entries ) {
final MogoModule key = entry.getKey();
final IMogoModuleProvider provider = entry.getValue();
if ( provider.getType() != ModuleType.TYPE_CARD_FRAGMENT ) {
// 仅卡片需要生命周期
continue;
}
final IMogoModuleLifecycle lifecycle = provider.getCardLifecycle();
if ( lifecycle != null ) {
if ( TextUtils.equals( key, mEnableModuleName ) ) {
if ( TextUtils.equals( key.getName(), mEnableModuleName ) ) {
lifecycle.onPerform();
} else {
lifecycle.onDisable();
@@ -169,208 +175,217 @@ public class MogoModulesManager implements MogoModulesHandler,
@Override
public void onMapLoaded() {
if ( mMapLoadedCallback != null ) {
mMapLoadedCallback.run();
mMapLoadedCallback = null;
}
if ( mEnableModuleName != null ) {
IMogoModuleProvider provider = getModuleProvider( mEnableModuleName );
if ( provider != null && provider.getMapListener() != null ) {
provider.getMapListener().onMapLoaded();
}
}
if ( mRefreshStrategyProvider != null ) {
if ( mRefreshStrategyProvider.getMapListener() != null ) {
mRefreshStrategyProvider.getMapListener().onMapLoaded();
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getMapListener() != null ) {
value.getMapListener().onMapLoaded();
}
}
}
@Override
public void onTouch( MotionEvent motionEvent ) {
if ( mEnableModuleName != null ) {
IMogoModuleProvider provider = getModuleProvider( mEnableModuleName );
if ( provider != null && provider.getMapListener() != null ) {
provider.getMapListener().onTouch( motionEvent );
}
}
if ( mRefreshStrategyProvider != null ) {
if ( mRefreshStrategyProvider.getMapListener() != null ) {
mRefreshStrategyProvider.getMapListener().onTouch( motionEvent );
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getType() == ModuleType.TYPE_CARD_FRAGMENT ) {
if ( mEnableModuleName != null && TextUtils.equals( value.getModuleName(), mEnableModuleName ) ) {
if ( value.getMapListener() != null ) {
value.getMapListener().onTouch( motionEvent );
}
}
} else {
if ( value.getMapListener() != null ) {
value.getMapListener().onTouch( motionEvent );
}
}
}
}
@Override
public void onPOIClick( MogoPoi poi ) {
if ( mEnableModuleName != null ) {
IMogoModuleProvider provider = getModuleProvider( mEnableModuleName );
if ( provider != null && provider.getMapListener() != null ) {
provider.getMapListener().onPOIClick( poi );
}
}
if ( mRefreshStrategyProvider != null ) {
if ( mRefreshStrategyProvider.getMapListener() != null ) {
mRefreshStrategyProvider.getMapListener().onPOIClick( poi );
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getType() == ModuleType.TYPE_CARD_FRAGMENT ) {
if ( mEnableModuleName != null && TextUtils.equals( value.getModuleName(), mEnableModuleName ) ) {
if ( value.getMapListener() != null ) {
value.getMapListener().onPOIClick( poi );
}
}
} else {
if ( value.getMapListener() != null ) {
value.getMapListener().onPOIClick( poi );
}
}
}
}
@Override
public void onMapClick( MogoLatLng latLng ) {
if ( mEnableModuleName != null ) {
IMogoModuleProvider provider = getModuleProvider( mEnableModuleName );
if ( provider != null && provider.getMapListener() != null ) {
provider.getMapListener().onMapClick( latLng );
}
}
if ( mRefreshStrategyProvider != null ) {
if ( mRefreshStrategyProvider.getMapListener() != null ) {
mRefreshStrategyProvider.getMapListener().onMapClick( latLng );
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getType() == ModuleType.TYPE_CARD_FRAGMENT ) {
if ( mEnableModuleName != null && TextUtils.equals( value.getModuleName(), mEnableModuleName ) ) {
if ( value.getMapListener() != null ) {
value.getMapListener().onMapClick( latLng );
}
}
} else {
if ( value.getMapListener() != null ) {
value.getMapListener().onMapClick( latLng );
}
}
}
}
@Override
public void onLockMap( boolean isLock ) {
if ( mEnableModuleName != null ) {
IMogoModuleProvider provider = getModuleProvider( mEnableModuleName );
if ( provider != null && provider.getMapListener() != null ) {
provider.getMapListener().onLockMap( isLock );
}
}
if ( mRefreshStrategyProvider != null ) {
if ( mRefreshStrategyProvider.getMapListener() != null ) {
mRefreshStrategyProvider.getMapListener().onLockMap( isLock );
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getType() == ModuleType.TYPE_CARD_FRAGMENT ) {
if ( mEnableModuleName != null && TextUtils.equals( value.getModuleName(), mEnableModuleName ) ) {
if ( value.getMapListener() != null ) {
value.getMapListener().onLockMap( isLock );
}
}
} else {
if ( value.getMapListener() != null ) {
value.getMapListener().onLockMap( isLock );
}
}
}
}
@Override
public void onMapModeChanged( EnumMapUI ui ) {
if ( mEnableModuleName != null ) {
IMogoModuleProvider provider = getModuleProvider( mEnableModuleName );
if ( provider != null && provider.getMapListener() != null ) {
provider.getMapListener().onMapModeChanged( ui );
}
}
if ( mRefreshStrategyProvider != null ) {
if ( mRefreshStrategyProvider.getMapListener() != null ) {
mRefreshStrategyProvider.getMapListener().onMapModeChanged( ui );
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getType() == ModuleType.TYPE_CARD_FRAGMENT ) {
if ( mEnableModuleName != null && TextUtils.equals( value.getModuleName(), mEnableModuleName ) ) {
if ( value.getMapListener() != null ) {
value.getMapListener().onMapModeChanged( ui );
}
}
} else {
if ( value.getMapListener() != null ) {
value.getMapListener().onMapModeChanged( ui );
}
}
}
}
@Override
public void onMapChanged( MogoLatLng location, float zoom, float tilt, float bearing ) {
if ( mRefreshStrategyProvider != null ) {
if ( mRefreshStrategyProvider.getMapListener() != null ) {
mRefreshStrategyProvider.getMapListener().onMapChanged( location, zoom, tilt, bearing );
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getType() == ModuleType.TYPE_CARD_FRAGMENT ) {
if ( mEnableModuleName != null && TextUtils.equals( value.getModuleName(), mEnableModuleName ) ) {
if ( value.getMapListener() != null ) {
value.getMapListener().onMapChanged( location, zoom, tilt, bearing );
}
}
} else {
if ( value.getMapListener() != null ) {
value.getMapListener().onMapChanged( location, zoom, tilt, bearing );
}
}
}
}
@Override
public void onInitNaviFailure() {
if ( mEnableModuleName != null ) {
IMogoModuleProvider provider = getModuleProvider( mEnableModuleName );
if ( provider != null && provider.getNaviListener() != null ) {
provider.getNaviListener().onInitNaviFailure();
}
}
if ( mRefreshStrategyProvider != null ) {
if ( mRefreshStrategyProvider.getNaviListener() != null ) {
mRefreshStrategyProvider.getNaviListener().onInitNaviFailure();
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getType() == ModuleType.TYPE_CARD_FRAGMENT ) {
if ( mEnableModuleName != null && TextUtils.equals( value.getModuleName(), mEnableModuleName ) ) {
if ( value.getNaviListener() != null ) {
value.getNaviListener().onInitNaviFailure();
}
}
} else {
if ( value.getNaviListener() != null ) {
value.getNaviListener().onInitNaviFailure();
}
}
}
}
@Override
public void onInitNaviSuccess() {
if ( mEnableModuleName != null ) {
IMogoModuleProvider provider = getModuleProvider( mEnableModuleName );
if ( provider != null && provider.getNaviListener() != null ) {
provider.getNaviListener().onInitNaviSuccess();
}
}
if ( mRefreshStrategyProvider != null ) {
if ( mRefreshStrategyProvider.getNaviListener() != null ) {
mRefreshStrategyProvider.getNaviListener().onInitNaviSuccess();
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getType() == ModuleType.TYPE_CARD_FRAGMENT ) {
if ( mEnableModuleName != null && TextUtils.equals( value.getModuleName(), mEnableModuleName ) ) {
if ( value.getNaviListener() != null ) {
value.getNaviListener().onInitNaviSuccess();
}
}
} else {
if ( value.getNaviListener() != null ) {
value.getNaviListener().onInitNaviSuccess();
}
}
}
}
@Override
public void onNaviInfoUpdate( MogoNaviInfo naviinfo ) {
if ( mEnableModuleName != null ) {
IMogoModuleProvider provider = getModuleProvider( mEnableModuleName );
if ( provider != null && provider.getNaviListener() != null ) {
provider.getNaviListener().onNaviInfoUpdate( naviinfo );
}
}
if ( mRefreshStrategyProvider != null ) {
if ( mRefreshStrategyProvider.getNaviListener() != null ) {
mRefreshStrategyProvider.getNaviListener().onNaviInfoUpdate( naviinfo );
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getType() == ModuleType.TYPE_CARD_FRAGMENT ) {
if ( mEnableModuleName != null && TextUtils.equals( value.getModuleName(), mEnableModuleName ) ) {
if ( value.getNaviListener() != null ) {
value.getNaviListener().onNaviInfoUpdate( naviinfo );
}
}
} else {
if ( value.getNaviListener() != null ) {
value.getNaviListener().onNaviInfoUpdate( naviinfo );
}
}
}
}
@Override
public void onStartNavi() {
Logger.i( TAG, "导航已开始" );
if ( mEnableModuleName != null ) {
IMogoModuleProvider provider = getModuleProvider( mEnableModuleName );
if ( provider != null && provider.getNaviListener() != null ) {
provider.getNaviListener().onStartNavi();
}
}
if ( mRefreshStrategyProvider != null ) {
if ( mRefreshStrategyProvider.getNaviListener() != null ) {
mRefreshStrategyProvider.getNaviListener().onStartNavi();
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getType() == ModuleType.TYPE_CARD_FRAGMENT ) {
if ( mEnableModuleName != null && TextUtils.equals( value.getModuleName(), mEnableModuleName ) ) {
if ( value.getNaviListener() != null ) {
value.getNaviListener().onStartNavi();
}
}
} else {
if ( value.getNaviListener() != null ) {
value.getNaviListener().onStartNavi();
}
}
}
}
@Override
public void onStopNavi() {
Logger.i( TAG, "导航已停止" );
if ( mEnableModuleName != null ) {
IMogoModuleProvider provider = getModuleProvider( mEnableModuleName );
if ( provider != null && provider.getNaviListener() != null ) {
provider.getNaviListener().onStopNavi();
}
}
if ( mRefreshStrategyProvider != null ) {
if ( mRefreshStrategyProvider.getNaviListener() != null ) {
mRefreshStrategyProvider.getNaviListener().onStopNavi();
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getType() == ModuleType.TYPE_CARD_FRAGMENT ) {
if ( mEnableModuleName != null && TextUtils.equals( value.getModuleName(), mEnableModuleName ) ) {
if ( value.getNaviListener() != null ) {
value.getNaviListener().onStopNavi();
}
}
} else {
if ( value.getNaviListener() != null ) {
value.getNaviListener().onStopNavi();
}
}
}
}
@Override
public void onLocationChanged( MogoLocation location ) {
if ( mEnableModuleName != null ) {
IMogoModuleProvider provider = getModuleProvider( mEnableModuleName );
if ( provider != null && provider.getLocationListener() != null ) {
provider.getLocationListener().onLocationChanged( location );
}
}
if ( mRefreshStrategyProvider != null ) {
if ( mRefreshStrategyProvider.getLocationListener() != null ) {
mRefreshStrategyProvider.getLocationListener().onLocationChanged( location );
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getType() == ModuleType.TYPE_CARD_FRAGMENT ) {
if ( mEnableModuleName != null && TextUtils.equals( value.getModuleName(), mEnableModuleName ) ) {
if ( value.getLocationListener() != null ) {
value.getLocationListener().onLocationChanged( location );
}
}
} else {
if ( value.getLocationListener() != null ) {
value.getLocationListener().onLocationChanged( location );
}
}
}
}
@@ -381,7 +396,7 @@ public class MogoModulesManager implements MogoModulesHandler,
public void onReceive( Context context, Intent intent ) {
final String action = intent.getAction();
if ( TextUtils.equals( action, Intent.ACTION_POWER_CONNECTED ) ) {
for ( IMogoModuleProvider value : mCardProviders.values() ) {
for ( IMogoModuleProvider value : mModuleProviders.values() ) {
if ( value.getCardLifecycle() != null ) {
value.getCardLifecycle().accOn();
}
@@ -408,11 +423,10 @@ public class MogoModulesManager implements MogoModulesHandler,
}
mReceiver = null;
mActivity = null;
if ( mCardProviders != null ) {
mCardProviders.clear();
if ( mModuleProviders != null ) {
mModuleProviders.clear();
}
mMapProvider = null;
mAppsListProvider = null;
mModuleProviders = null;
mMapLoadedCallback = null;
mEnableModuleName = null;
}

View File

@@ -19,6 +19,7 @@ import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.module.main.R;
import com.mogo.service.module.IMogoModuleLifecycle;
import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.service.module.ModuleType;
/**
* @author congtaowang
@@ -80,7 +81,7 @@ public class PlaceholderFragmentProvider implements IMogoModuleProvider {
@Override
public int getType() {
return TYPE_FRAGMENT;
return ModuleType.TYPE_CARD_FRAGMENT;
}
@Override