diff --git a/core/mogo-core-function-call/build.gradle b/core/mogo-core-function-call/build.gradle index a4854e67fe..7ba076435f 100644 --- a/core/mogo-core-function-call/build.gradle +++ b/core/mogo-core-function-call/build.gradle @@ -47,6 +47,7 @@ dependencies { } else { implementation project(':core:mogo-core-data') + implementation project(':core:mogo-core-utils') implementation project(':core:mogo-core-function-api') implementation project(':core:function-impl:mogo-core-function-hmi') } diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/CallerBusManager.java b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/CallerBusManager.java new file mode 100644 index 0000000000..bb137afbd1 --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/CallerBusManager.java @@ -0,0 +1,27 @@ +package com.mogo.eagle.core.function.call; + +import com.alibaba.android.arouter.facade.template.IProvider; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author xiaoyuzhou + * @date 2021/9/17 4:10 下午 + */ +public class CallerBusManager { + private static final String TAG = "CallerBusManager"; + + private static final Map sSingletons = new ConcurrentHashMap<>(); + + public static T get(Class clazz) { + return (T) sSingletons.get(clazz); + } + + public static void registerApi(Class api, T impl) throws Exception { + if (api == null || impl == null) { + return; + } + sSingletons.put(api, impl); + } +} diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/base/CallerBase.java b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/base/CallerBase.java new file mode 100644 index 0000000000..053fdb3334 --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/base/CallerBase.java @@ -0,0 +1,36 @@ +package com.mogo.eagle.core.function.call.base; + +import com.alibaba.android.arouter.facade.template.IProvider; +import com.alibaba.android.arouter.launcher.ARouter; +import com.mogo.eagle.core.function.call.CallerBusManager; +import com.mogo.eagle.core.utilcode.util.LogUtils; + +/** + * @author xiaoyuzhou + * @date 2021/9/17 4:02 下午 + */ +public class CallerBase { + private static final String TAG = "CallerBase"; + + public static T getApiInstance(Class clazz, String path) { + T inst = CallerBusManager.get(clazz); + if (inst == null) { + synchronized (CallerBase.class) { + inst = CallerBusManager.get(clazz); + if (inst != null) { + return inst; + } + T newInst = (T) ARouter.getInstance().build(path).navigation(); + try { + CallerBusManager.registerApi(clazz, newInst); + LogUtils.dTag(TAG, "keep IProvider instance to SingletonHolder: path = %s", path); + } catch (Exception e) { + e.printStackTrace(); + } + return newInst; + } + } + return inst; + } + +} diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.java b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.java new file mode 100644 index 0000000000..9816b16684 --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.java @@ -0,0 +1,16 @@ +package com.mogo.eagle.core.function.call.hmi; + +import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider; +import com.mogo.eagle.core.function.call.base.CallerBase; +import com.mogo.service.MogoServicePaths; + +/** + * @author xiaoyuzhou + * @date 2021/9/17 3:59 下午 + */ +public class CallerHmiManager extends CallerBase { + + public static IMoGoWaringProvider getWaringProviderApi() { + return getApiInstance(IMoGoWaringProvider.class, MogoServicePaths.PATH_V2X_WARNING); + } +} diff --git a/foudations/mogo-commons/build.gradle b/foudations/mogo-commons/build.gradle index cea1177c3e..9c675983cd 100644 --- a/foudations/mogo-commons/build.gradle +++ b/foudations/mogo-commons/build.gradle @@ -54,6 +54,7 @@ dependencies { api project(":foudations:mogo-aicloud-services-sdk") api project(":tts:tts-base") implementation project(":skin:mogo-skin-support") + implementation project(':core:mogo-core-utils') } api 'org.greenrobot:eventbus:3.1.1' } diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java index aad5677ed7..6fe6e20428 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java @@ -24,6 +24,7 @@ import com.mogo.commons.network.Constants; import com.mogo.commons.network.ParamsUtil; import com.mogo.commons.network.X509TrustManagerImpl; import com.mogo.commons.storage.SpStorage; +import com.mogo.eagle.core.utilcode.util.Utils; import com.mogo.utils.ThreadPoolService; import com.mogo.utils.TipDrawable; import com.mogo.utils.TipToast; @@ -68,6 +69,7 @@ public abstract class AbsMogoApplication extends Application { aMapNaviView.onCreate(null); sApp = this; initARouter(); + Utils.init(this); if ( shouldInit() ) { init(); } diff --git a/modules/mogo-module-obu-mogo/build.gradle b/modules/mogo-module-obu-mogo/build.gradle index 44a46d97f7..0c1725b95c 100644 --- a/modules/mogo-module-obu-mogo/build.gradle +++ b/modules/mogo-module-obu-mogo/build.gradle @@ -60,6 +60,7 @@ dependencies { api project(':services:mogo-service-api') implementation project(':modules:mogo-module-common') implementation project(':core:mogo-core-data') + implementation project(':core:mogo-core-function-call') } implementation rootProject.ext.dependencies.mogoobu diff --git a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt index bee003e374..c1686f80e7 100644 --- a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt +++ b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt @@ -13,6 +13,7 @@ import com.mogo.service.MogoServicePaths import com.mogo.service.map.IMogoMapService import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider import com.mogo.eagle.core.function.api.hmi.warning.WarningStatusListener +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.utils.logger.Logger import com.mogo.utils.storage.SharedPrefsMgr import com.zhidao.support.obu.MogoObuManager @@ -46,7 +47,7 @@ class MogoPrivateObuManager private constructor() { .navigation(context) as IMogoServiceApis mContext = context // 获取预警模块的接口 - mIMoGoWaringProvider = mMogoServiceApis!!.waringProviderApi + mIMoGoWaringProvider = CallerHmiManager.getWaringProviderApi() mIMogoMapService = mMogoServiceApis!!.mapServiceApi //自研obu