新建IMoGoFunctionProvider.java提供给功能模块进行初始化加载的一些定义

Signed-off-by: 董宏宇 <martindhy@gmail.com>
This commit is contained in:
董宏宇
2021-09-16 17:24:28 +08:00
parent 0eea8c223d
commit 33347a9730
25 changed files with 232 additions and 57 deletions

View File

@@ -256,6 +256,7 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
// 加载地图,触发地图加载完毕回调,在初始化其他卡片模块,保证卡片模块可以正确获取地图相关服务。
loadContainerModules();
MogoModulesManager.getInstance().loadModules();
MogoModulesManager.getInstance().loadFunctionModules();
mPresenter.delayOperations();
// 启动一些基本的服务:定位等

View File

@@ -24,6 +24,11 @@ public interface MogoModulesHandler {
*/
List<IMogoModuleProvider> loadCardsModule();
/**
* 架构升级v1.1加载功能模块
*/
void loadFunctionModules();
/**
* 加载地图
*

View File

@@ -6,6 +6,7 @@ import android.content.Context;
import androidx.fragment.app.Fragment;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.MogoModule;
import com.mogo.module.common.MogoModulePaths;
@@ -38,6 +39,10 @@ public class MogoModulesManager implements MogoModulesHandler {
// 空间换效率
private Map< String, IMogoModuleProvider > mModuleNameProviders = new HashMap<>();
// 架构升级后的加载功能模块的方式
private Map< MogoModule, IMoGoFunctionProvider> mModuleFunctionProviders = new HashMap<>();
private Map< String, IMoGoFunctionProvider> mModuleNameFunctionProviders = new HashMap<>();
private static volatile MogoModulesManager sInstance;
private MogoModulesManager() {
@@ -101,6 +106,21 @@ public class MogoModulesManager implements MogoModulesHandler {
return providers;
}
@Override
public void loadFunctionModules() {
final List< MogoModule > modules = MogoModulePaths.getModules();
if ( modules != null && !modules.isEmpty() ) {
for ( MogoModule module : modules ) {
Logger.d( TAG, "module.getPath():" + module.getPath() + " name: " + module.getName() );
IMoGoFunctionProvider provider = loadFunction( module.getPath() );
if ( provider != null ) {
mModuleFunctionProviders.put( module, provider );
mModuleNameFunctionProviders.put( module.getName(), provider );
}
}
}
}
@Override
public void loadMapModule( int containerId ) {
Logger.d( TAG, "loadMapModule" );
@@ -154,7 +174,7 @@ public class MogoModulesManager implements MogoModulesHandler {
@Override
public void loadWaringModule(int containerId) {
IMogoModuleProvider provider = ( IMogoModuleProvider ) ARouter.getInstance()
IMoGoFunctionProvider provider = ( IMoGoFunctionProvider ) ARouter.getInstance()
.build( MogoServicePaths.PATH_V2X_WARNING )
.navigation( getContext() );
addFragment( provider, containerId );
@@ -165,6 +185,16 @@ public class MogoModulesManager implements MogoModulesHandler {
try {
return ( IMogoModuleProvider ) ARouter.getInstance().build( path ).navigation( getContext() );
} catch ( Exception e ) {
e.printStackTrace();
return null;
}
}
private IMoGoFunctionProvider loadFunction( String path ) {
try {
return ( IMoGoFunctionProvider ) ARouter.getInstance().build( path ).navigation( getContext() );
} catch ( Exception e ) {
e.printStackTrace();
return null;
}
}
@@ -188,6 +218,24 @@ public class MogoModulesManager implements MogoModulesHandler {
.commitAllowingStateLoss();
}
private void addFragment( IMoGoFunctionProvider provider, int containerId ) {
if ( provider == null ) {
Logger.e( TAG, "add fragment fail cause provider == null, container is %s", ResourcesHelper.getResNameById( getApplicationContext(), containerId ) );
return;
}
Fragment fragment = mActivity.getSupportFragmentManager().findFragmentByTag( provider.getFunctionName() );
if ( fragment == null ) {
fragment = provider.createCoverage( getContext(), null );
}
if ( fragment == null ) {
Logger.e( TAG, "add fragment fail cause fragment == null, container is %s", ResourcesHelper.getResNameById( getApplicationContext(), containerId ) );
return;
}
mActivity.getSupportFragmentManager().beginTransaction()
.replace( containerId, fragment, provider.getFunctionName() )
.commitAllowingStateLoss();
}
@Override
public void onDestroy() {
if ( mModuleNameProviders != null ) {
@@ -207,6 +255,23 @@ public class MogoModulesManager implements MogoModulesHandler {
if ( mModuleProviders != null ) {
mModuleProviders.clear();
}
if ( mModuleFunctionProviders != null ) {
Collection< IMoGoFunctionProvider > modules = mModuleFunctionProviders.values();
if ( modules != null ) {
for ( IMoGoFunctionProvider module : modules ) {
try {
Logger.d( TAG, "destroy module: " + module.getFunctionName() );
module.onDestroy();
} catch ( Exception e ) {
Logger.e( TAG, e, "onDestroy" );
}
}
}
mModuleNameFunctionProviders.clear();
}
if ( mModuleFunctionProviders != null ) {
mModuleFunctionProviders.clear();
}
mActivity = null;
}
}