新建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

@@ -1,6 +1,10 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'kotlin-android-extensions'
id 'kotlin-kapt'
id 'com.alibaba.arouter'
}
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
// buildToolsVersion rootProject.ext.android.buildToolsVersion
@@ -12,6 +16,15 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
//ARouter apt 参数
kapt {
useBuildCache = false
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
}
buildTypes {

View File

@@ -0,0 +1,12 @@
### 模块说明
本模块定义业务层具备那些功能不提供具体业务实现所有具体业务实现均在mogo-core-function-impl模块中
adas--域控制器相关
chat--车聊聊相关
check--车辆检测相关
dispatch--车辆调度相关
hmi--UI这里承载的是所有鹰眼的UI展示
map--地图相关
notice--公告
obu--OBU预警逻辑相关
tts--语音播报&语音交互相关
v2x--车机端预警逻辑相关

View File

@@ -1,6 +1,10 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'kotlin-android-extensions'
id 'kotlin-kapt'
id 'com.alibaba.arouter'
}
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
// buildToolsVersion rootProject.ext.android.buildToolsVersion
@@ -12,6 +16,15 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
//ARouter apt 参数
kapt {
useBuildCache = false
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
}
buildTypes {
@@ -31,6 +44,9 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation rootProject.ext.dependencies.kotlinstdlibjdk7
implementation rootProject.ext.dependencies.arouter
kapt rootProject.ext.dependencies.aroutercompiler
if (Boolean.valueOf(RELEASE)) {
} else {

View File

@@ -0,0 +1,37 @@
package com.mogo.eagle.core.function.api.base;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import com.alibaba.android.arouter.facade.template.IProvider;
/**
* @author xiaoyuzhou
* @date 2021/9/16 4:40 下午
* 功能提供者基础
*/
public interface IMoGoFunctionProvider extends IProvider {
/**
* 创建图层如果功能需要在HMI单独创建新的图层才需要实现
*
* @param context 上下文
* @return 图层Fragment
*/
Fragment createCoverage(Context context, Bundle data);
/**
* 功能模块唯一标识
*
* @return 功能模块名称
*/
@NonNull
String getFunctionName();
default void onDestroy() {
Log.d("IMoGoFunctionProvider", "onDestroy");
}
}

View File

@@ -1,13 +1,13 @@
package com.mogo.service.warning
package com.mogo.eagle.core.function.api.hmi.warning
import com.mogo.eagle.core.data.enums.WarningDirectionEnum
import com.mogo.service.module.IMogoModuleProvider
import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider
/**
* @author xiaoyuzhou
* @date 2021/8/2 7:36 下午
*/
interface IMoGoWaringProvider : IMogoModuleProvider {
interface IMoGoWaringProvider : IMoGoFunctionProvider {
/**
* 展示VR下V2X预警
*
@@ -21,7 +21,7 @@ interface IMoGoWaringProvider : IMogoModuleProvider {
alertContent: String?,
ttsContent: String?,
tag: String?,
listener:WarningStatusListener?
listener: WarningStatusListener?
)
/**

View File

@@ -0,0 +1,10 @@
package com.mogo.eagle.core.function.api.hmi.warning
/**
* @author xiaoyuzhou
* @date 2021/9/13 4:41 下午
*/
interface WarningStatusListener {
fun onShow() {}
fun onDismiss() {}
}

View File

@@ -1,6 +1,10 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'kotlin-android-extensions'
id 'kotlin-kapt'
id 'com.alibaba.arouter'
}
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
// buildToolsVersion rootProject.ext.android.buildToolsVersion
@@ -12,6 +16,14 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
//ARouter apt 参数
kapt {
useBuildCache = false
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
}
buildTypes {

View File

@@ -1,6 +1,10 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'kotlin-android-extensions'
id 'kotlin-kapt'
id 'com.alibaba.arouter'
}
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
// buildToolsVersion rootProject.ext.android.buildToolsVersion
@@ -12,6 +16,14 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
//ARouter apt 参数
kapt {
useBuildCache = false
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
}
buildTypes {

View File

@@ -1,6 +1,10 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
plugins {
id 'com.android.library'
id 'kotlin-android'
id 'kotlin-android-extensions'
id 'kotlin-kapt'
id 'com.alibaba.arouter'
}
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
// buildToolsVersion rootProject.ext.android.buildToolsVersion
@@ -12,6 +16,14 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
//ARouter apt 参数
kapt {
useBuildCache = false
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
}
buildTypes {

View File

@@ -4,7 +4,7 @@ import android.content.Context
import android.view.View
import com.mogo.module.hmi.notification.enums.SidePattern
import com.mogo.module.hmi.notification.interfaces.OnFloatAnimator
import com.mogo.service.warning.WarningStatusListener
import com.mogo.eagle.core.function.api.hmi.warning.WarningStatusListener
import com.mogo.utils.WindowUtils
import com.mogo.utils.logger.Logger

View File

@@ -6,7 +6,7 @@ import com.mogo.module.hmi.notification.enums.ShowPattern
import com.mogo.module.hmi.notification.enums.SidePattern
import com.mogo.module.hmi.notification.interfaces.OnFloatAnimator
import com.mogo.module.hmi.notification.interfaces.OnFloatCallbacks
import com.mogo.service.warning.WarningStatusListener
import com.mogo.eagle.core.function.api.hmi.warning.WarningStatusListener
/**
* @author xiaoyuzhou

View File

@@ -7,7 +7,7 @@ import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.module.hmi.WaringConst
import com.mogo.service.IMogoServiceApis
import com.mogo.service.MogoServicePaths
import com.mogo.service.warning.IMoGoWaringProvider
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider
import com.mogo.utils.logger.Logger
/**

View File

@@ -7,7 +7,7 @@ import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.module.hmi.WaringConst
import com.mogo.service.IMogoServiceApis
import com.mogo.service.MogoServicePaths
import com.mogo.service.warning.IMoGoWaringProvider
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider
import com.mogo.utils.logger.Logger
/**

View File

@@ -8,7 +8,7 @@ import com.mogo.module.common.enums.EventTypeEnum
import com.mogo.module.hmi.WaringConst
import com.mogo.service.IMogoServiceApis
import com.mogo.service.MogoServicePaths
import com.mogo.service.warning.IMoGoWaringProvider
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider
import com.mogo.utils.logger.Logger
/**

View File

@@ -2,7 +2,7 @@ package com.mogo.module.hmi.ui
import com.mogo.commons.mvp.IView
import com.mogo.eagle.core.data.enums.WarningDirectionEnum
import com.mogo.service.warning.WarningStatusListener
import com.mogo.eagle.core.function.api.hmi.warning.WarningStatusListener
/**

View File

@@ -15,7 +15,7 @@ import com.mogo.module.hmi.notification.WarningFloat
import com.mogo.module.hmi.notification.anim.DefaultAnimator
import com.mogo.module.hmi.notification.enums.SidePattern
import com.mogo.module.hmi.ui.widget.V2XNotificationView
import com.mogo.service.warning.WarningStatusListener
import com.mogo.eagle.core.function.api.hmi.warning.WarningStatusListener
import com.mogo.utils.logger.Logger
import kotlinx.android.synthetic.main.fragment_warning.*

View File

@@ -9,12 +9,11 @@ import androidx.fragment.app.Fragment;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.eagle.core.data.enums.WarningDirectionEnum;
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider;
import com.mogo.eagle.core.function.api.hmi.warning.WarningStatusListener;
import com.mogo.module.hmi.WaringConst;
import com.mogo.module.hmi.ui.MoGoWarningFragment;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.module.ModuleType;
import com.mogo.service.warning.IMoGoWaringProvider;
import com.mogo.service.warning.WarningStatusListener;
import com.mogo.utils.logger.Logger;
/**
@@ -36,7 +35,7 @@ public class MoGoWarningProvider implements IMoGoWaringProvider {
}
@Override
public Fragment createFragment(Context context, Bundle data) {
public Fragment createCoverage(Context context, Bundle data) {
Logger.d(TAG, "初始化蘑菇预警模块 Fragment……");
mMoGoWarningFragment = new MoGoWarningFragment();
return mMoGoWarningFragment;
@@ -44,15 +43,10 @@ public class MoGoWarningProvider implements IMoGoWaringProvider {
@NonNull
@Override
public String getModuleName() {
public String getFunctionName() {
return WaringConst.MODULE_NAME;
}
@Override
public int getType() {
return ModuleType.TYPE_CARD_FRAGMENT;
}
@Override
public void showWarningTrafficLight(int checkLightId) {
mMoGoWarningFragment.showWarningTrafficLight(checkLightId);
@@ -97,7 +91,7 @@ public class MoGoWarningProvider implements IMoGoWaringProvider {
public void showWarningV2X(int v2xType, @Nullable String alertContent,
@Nullable String ttsContent, @Nullable String tag,
@Nullable WarningStatusListener listener) {
mMoGoWarningFragment.showWarningV2X(v2xType, alertContent, ttsContent, tag,listener);
mMoGoWarningFragment.showWarningV2X(v2xType, alertContent, ttsContent, tag, listener);
}
@Override

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;
}
}

View File

@@ -11,8 +11,8 @@ import com.mogo.module.obu.mogo.utils.TrafficDataConvertUtils
import com.mogo.service.IMogoServiceApis
import com.mogo.service.MogoServicePaths
import com.mogo.service.map.IMogoMapService
import com.mogo.service.warning.IMoGoWaringProvider
import com.mogo.service.warning.WarningStatusListener
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider
import com.mogo.eagle.core.function.api.hmi.warning.WarningStatusListener
import com.mogo.utils.logger.Logger
import com.mogo.utils.storage.SharedPrefsMgr
import com.zhidao.support.obu.MogoObuManager

View File

@@ -61,6 +61,7 @@ dependencies {
api project(":libraries:mogo-map-api")
api project(":skin:mogo-skin-support")
implementation project(':core:mogo-core-data')
api project(':core:mogo-core-function-api')
}
}

View File

@@ -23,7 +23,6 @@ import com.mogo.service.map.IMogoMapService;
import com.mogo.service.obu.IMoGoObuProvider;
import com.mogo.service.smp.IMogoSmallMapProvider;
import com.mogo.service.module.IMogoActionManager;
import com.mogo.service.module.IMogoAddressManager;
import com.mogo.service.module.IMogoMarkerService;
import com.mogo.service.module.IMogoRegisterCenter;
import com.mogo.service.module.IMogoSearchManager;
@@ -42,7 +41,7 @@ import com.mogo.service.share.IMogoTanluProvider;
import com.mogo.service.share.IMogoTanluUiProvider;
import com.mogo.service.v2x.DisplayEffectsInterface;
import com.mogo.service.v2x.IV2XProvider;
import com.mogo.service.warning.IMoGoWaringProvider;
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider;
import com.mogo.service.windowview.IMogoTopViewManager;
import com.mogo.service.windowview.IMogoWindowManager;
import com.mogo.skin.support.IMogoSkinSupportInstaller;

View File

@@ -1,13 +0,0 @@
package com.mogo.service.warning;
/**
* @author xiaoyuzhou
* @date 2021/9/13 4:41 下午
*/
public interface WarningStatusListener {
default void onShow() {
}
default void onDismiss() {
}
}

View File

@@ -31,7 +31,6 @@ import com.mogo.service.map.IMogoMapService;
import com.mogo.service.obu.IMoGoObuProvider;
import com.mogo.service.smp.IMogoSmallMapProvider;
import com.mogo.service.module.IMogoActionManager;
import com.mogo.service.module.IMogoAddressManager;
import com.mogo.service.module.IMogoMarkerService;
import com.mogo.service.module.IMogoRegisterCenter;
import com.mogo.service.module.IMogoSearchManager;
@@ -50,7 +49,7 @@ import com.mogo.service.share.IMogoTanluProvider;
import com.mogo.service.share.IMogoTanluUiProvider;
import com.mogo.service.v2x.DisplayEffectsInterface;
import com.mogo.service.v2x.IV2XProvider;
import com.mogo.service.warning.IMoGoWaringProvider;
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider;
import com.mogo.service.windowview.IMogoTopViewManager;
import com.mogo.service.windowview.IMogoWindowManager;
import com.mogo.skin.support.IMogoSkinSupportInstaller;