+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4902d69a3..980a83ff5d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -320,6 +320,8 @@ dependencies {
f8xxImplementation project(':modules:mogo-module-left-panel-noop')
em3Implementation project(':modules:mogo-module-left-panel-noop')
}
+
+ apply from: "./functions/baseservices.gradle"
}
//android.applicationVariants.all { variant ->
diff --git a/app/functions/README.md b/app/functions/README.md
new file mode 100644
index 0000000000..27064aa5d3
--- /dev/null
+++ b/app/functions/README.md
@@ -0,0 +1 @@
+# 不同渠道,依赖的实现不一样,需要各个渠道都去依赖各自需要的实现,渠道太多导致build.gradle 文件臃肿,可以通过分gradle文件方式减少臃肿
\ No newline at end of file
diff --git a/app/functions/baseservices.gradle b/app/functions/baseservices.gradle
new file mode 100644
index 0000000000..8a6726e463
--- /dev/null
+++ b/app/functions/baseservices.gradle
@@ -0,0 +1,26 @@
+// 基础服务:仅比亚迪渠道用sdk方式实现,其他都基于apk基础服务
+
+project.dependencies {
+ if (Boolean.valueOf(RELEASE)) {
+ bydImplementation rootProject.ext.dependencies.mogobaseservicesdk
+
+ d82xImplementation rootProject.ext.dependencies.mogobaseserviceapk
+ em1Implementation rootProject.ext.dependencies.mogobaseserviceapk
+ d8xxImplementation rootProject.ext.dependencies.mogobaseserviceapk
+ em4Implementation rootProject.ext.dependencies.mogobaseserviceapk
+ e8xxImplementation rootProject.ext.dependencies.mogobaseserviceapk
+ e8xxImplementation rootProject.ext.dependencies.mogobaseserviceapk
+ f8xxImplementation rootProject.ext.dependencies.mogobaseserviceapk
+ em3Implementation rootProject.ext.dependencies.mogobaseserviceapk
+ } else {
+ bydImplementation project(':foudations:mogo-base-services-sdk')
+
+ d82xImplementation project(':foudations:mogo-base-services-apk')
+ em1Implementation project(':foudations:mogo-base-services-apk')
+ d8xxImplementation project(':foudations:mogo-base-services-apk')
+ em4Implementation project(':foudations:mogo-base-services-apk')
+ e8xxImplementation project(':foudations:mogo-base-services-apk')
+ f8xxImplementation project(':foudations:mogo-base-services-apk')
+ em3Implementation project(':foudations:mogo-base-services-apk')
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java
index 50d5971763..c2904fda00 100644
--- a/app/src/main/java/com/mogo/launcher/MogoApplication.java
+++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java
@@ -9,6 +9,8 @@ import com.auto.zhidao.logsdk.CrashSystem;
import com.bytedance.boost_multidex.BoostMultiDex;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.commons.debug.DebugConfig;
+import com.mogo.map.location.IMogoLocationListener;
+import com.mogo.map.location.MogoLocation;
import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant;
import com.mogo.module.carchatting.card.CallChatConstant;
import com.mogo.module.common.MogoModule;
@@ -19,8 +21,12 @@ import com.mogo.module.push.base.PushUIConstants;
import com.mogo.module.service.ServiceConst;
import com.mogo.module.tanlu.constant.TanluConstants;
import com.mogo.module.v2x.V2XConst;
+import com.mogo.service.IMogoServiceApis;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.connection.IMogoSocketManager;
+import com.mogo.service.passport.IMogoPassportManager;
+import com.mogo.service.passport.IMogoTicketCallback;
+import com.mogo.utils.UiThreadHandler;
import com.mogo.utils.logger.LogLevel;
import com.mogo.utils.logger.Logger;
import com.zhidao.boot.persistent.lib.PersistentManager;
@@ -43,66 +49,79 @@ public class MogoApplication extends AbsMogoApplication {
super.onCreate();
// Crash 日志收集
final long start = System.currentTimeMillis();
- CrashSystem crashSystem = CrashSystem.getInstance(this);
+ CrashSystem crashSystem = CrashSystem.getInstance( this );
crashSystem.init();
//设置debug模式,日志不上传
- crashSystem.setDebug(BuildConfig.DEBUG);
- Logger.init(BuildConfig.DEBUG ? LogLevel.DEBUG : LogLevel.OFF);
+ crashSystem.setDebug( BuildConfig.DEBUG );
+ Logger.init( BuildConfig.DEBUG ? LogLevel.DEBUG : LogLevel.OFF );
// MogoModulePaths.addModule(new MogoModule(PATH_GUIDE_FRAGMENT, PATH_GUIDE_MODULE_NAME));
- MogoModulePaths.addModule(new MogoModule(AuthorizeConstant.PATH_AGREEMENT_FRAGMENT, AuthorizeConstant.PATH_AGREEMENT_MODULE_NAME));
+ MogoModulePaths.addModule( new MogoModule( AuthorizeConstant.PATH_AGREEMENT_FRAGMENT, AuthorizeConstant.PATH_AGREEMENT_MODULE_NAME ) );
//运营位卡片,需要默认显示,放在第一个加载
- if (DebugConfig.isLauncher()) {
- MogoModulePaths.addModule(new MogoModule(MediaConstants.TAG, MediaConstants.MODULE_TYPE));
+ if ( DebugConfig.isLauncher() ) {
+ MogoModulePaths.addModule( new MogoModule( MediaConstants.TAG, MediaConstants.MODULE_TYPE ) );
}
- MogoModulePaths.addModule(new MogoModule(CallChatConstant.PROVIDER, CallChatConstant.MODULE_NAME));
- MogoModulePaths.addModule(new MogoModule(TanluConstants.TAG, TanluConstants.MODEL_NAME));
- MogoModulePaths.addModule(new MogoModule(MogoServicePaths.PATH_SHARE, "ShareControl"));
+ MogoModulePaths.addModule( new MogoModule( CallChatConstant.PROVIDER, CallChatConstant.MODULE_NAME ) );
+ MogoModulePaths.addModule( new MogoModule( TanluConstants.TAG, TanluConstants.MODEL_NAME ) );
+ MogoModulePaths.addModule( new MogoModule( MogoServicePaths.PATH_SHARE, "ShareControl" ) );
- MogoModulePaths.addModule(new MogoModule(EventPanelConstants.PATH_NAME,
- EventPanelConstants.MODULE_NAME));
- MogoModulePaths.addModule(new MogoModule(LeftPanelConst.PATH_NAME,
- LeftPanelConst.MODULE_NAME));
+ MogoModulePaths.addModule( new MogoModule( EventPanelConstants.PATH_NAME,
+ EventPanelConstants.MODULE_NAME ) );
+ MogoModulePaths.addModule( new MogoModule( LeftPanelConst.PATH_NAME,
+ LeftPanelConst.MODULE_NAME ) );
MogoModulePaths.addBaseModule( new MogoModule( ServiceConst.PATH_REFRESH_STRATEGY, ServiceConst.PATH_REFRESH_STRATEGY ) );
MogoModulePaths.addBaseModule( new MogoModule( V2XConst.PATH_V2X_UI, V2XConst.PATH_V2X_UI ) );
- MogoModulePaths.addModule(new MogoModule( PushUIConstants.PATH, PushUIConstants.NAME));
+ MogoModulePaths.addModule( new MogoModule( PushUIConstants.PATH, PushUIConstants.NAME ) );
- if (!DebugConfig.isLauncher()) {
- PersistentManager.getInstance().initManager(this);
- Intent intent = new Intent(this, MogoMainService.class);
- startService(intent);
+ if ( !DebugConfig.isLauncher() ) {
+ PersistentManager.getInstance().initManager( this );
+ Intent intent = new Intent( this, MogoMainService.class );
+ startService( intent );
}
- Log.i("timer", "cost " + (System.currentTimeMillis() - start) + "ms");
+ Log.i( "timer", "cost " + ( System.currentTimeMillis() - start ) + "ms" );
}
- private void initDebugConfig(){
- DebugConfig.setNetMode(BuildConfig.NET_ENV);
- DebugConfig.setDebug(BuildConfig.DEBUG);
- DebugConfig.setAIType(BuildConfig.AIType);
- DebugConfig.setLaunchLocationService(BuildConfig.LAUNCH_LOCATION_SERVICE);
- DebugConfig.setUseCustomNavi(BuildConfig.USE_CUSTOM_NAVI);
- DebugConfig.setLauncher(BuildConfig.IS_LAUNCHER);
+ private void initDebugConfig() {
+ DebugConfig.setNetMode( BuildConfig.NET_ENV );
+ DebugConfig.setDebug( BuildConfig.DEBUG );
+ DebugConfig.setAIType( BuildConfig.AIType );
+ DebugConfig.setLaunchLocationService( BuildConfig.LAUNCH_LOCATION_SERVICE );
+ DebugConfig.setUseCustomNavi( BuildConfig.USE_CUSTOM_NAVI );
+ DebugConfig.setLauncher( BuildConfig.IS_LAUNCHER );
DebugConfig.setActiveAIAssistFlag( BuildConfig.AI_ASSIST_ACTIVE_STAUTS );
- DebugConfig.setCarMachineType(BuildConfig.CAR_MACHINE_TYPE);
+ DebugConfig.setCarMachineType( BuildConfig.CAR_MACHINE_TYPE );
}
@Override
protected void init() {
super.init();
- IMogoSocketManager mMogoSocketManager = ARouter.getInstance().navigation(IMogoSocketManager.class);
- if (mMogoSocketManager != null) {
- mMogoSocketManager.init(getApplicationContext(), "com.mogo.launcher");
- } else {
- Logger.e(TAG, "init socket server error.");
- }
+ UiThreadHandler.postDelayed( () -> {
+ final IMogoServiceApis apis = ARouter.getInstance().navigation( IMogoServiceApis.class );
+ apis.getSocketManagerApi( getApplicationContext() ).init( getApplicationContext(), "com.mogo.launcher" );
+ apis.getPassportManagerApi().requestTicket( new IMogoTicketCallback() {
+ @Override
+ public void onSuccess( String ticket ) {
+ Logger.d( TAG, "ticket = %s", ticket );
+ }
+
+ @Override
+ public void onError( int code, String msg ) {
+ Logger.w( TAG, "code = %s, msg = %s", code, msg );
+ }
+ } );
+ apis.getLocationInfoApi().start();
+ apis.getMapServiceApi().getSingletonLocationClient( getApplicationContext() ).addLocationListener( location -> {
+ apis.getLocationInfoApi().provideLocation( location );
+ } );
+ }, 2_000L );
}
@Override
- protected void attachBaseContext(Context base) {
- super.attachBaseContext(base);
- BoostMultiDex.install(base);
+ protected void attachBaseContext( Context base ) {
+ super.attachBaseContext( base );
+ BoostMultiDex.install( base );
}
}
diff --git a/config.gradle b/config.gradle
index 683dc75b5c..a251adf64e 100644
--- a/config.gradle
+++ b/config.gradle
@@ -4,12 +4,12 @@ ext {
android = [
// applicationId : "com.mogo.launcher",
// zhidadoApplicationId: "com.zhidao.launcher",
- launcherApplicationId : "com.mogo.launcher",
- independentApplicationId: "com.mogo.launcher.app",
- compileSdkVersion : 28,
- buildToolsVersion : "29.0.2",
- minSdkVersion : 19,
- targetSdkVersion : 22,
+launcherApplicationId : "com.mogo.launcher",
+independentApplicationId: "com.mogo.launcher.app",
+compileSdkVersion : 28,
+buildToolsVersion : "29.0.2",
+minSdkVersion : 19,
+targetSdkVersion : 22,
]
dependencies = [
@@ -172,5 +172,9 @@ ext {
moduleleftpanelnoop : "com.mogo.module:module-left-panel-noop:${MOGO_MODULE_LEFT_PANEL_VERSION}",
// 闪屏页
modulesplash : "com.mogo.module:module-splash:${MOGO_MODULE_SPLASH_VERSION}",
+
+ // 基础服务实现
+ mogobaseservicesdk : "com.mogo.base:services-apk:${MOGO_BASE_SERVICES_SDK_VERSION}",
+ mogobaseserviceapk : "com.mogo.base:services-sdk:${MOGO_BASE_SERVICES_APK_VERSION}",
]
}
\ No newline at end of file
diff --git a/foudations/mogo-base-services-apk/.gitignore b/foudations/mogo-base-services-apk/.gitignore
new file mode 100644
index 0000000000..42afabfd2a
--- /dev/null
+++ b/foudations/mogo-base-services-apk/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/foudations/mogo-base-services-apk/README.md b/foudations/mogo-base-services-apk/README.md
new file mode 100644
index 0000000000..b6ee9eafae
--- /dev/null
+++ b/foudations/mogo-base-services-apk/README.md
@@ -0,0 +1,7 @@
+## 基实现功能
+
+基础服务apk实现对应功能:位置上报、长连接、passport
+
+位置上报:com.zhidao.locationinfo
+长链:com.zhidao.socketservice
+passport:
\ No newline at end of file
diff --git a/foudations/mogo-base-services-apk/build.gradle b/foudations/mogo-base-services-apk/build.gradle
new file mode 100644
index 0000000000..943521aac6
--- /dev/null
+++ b/foudations/mogo-base-services-apk/build.gradle
@@ -0,0 +1,51 @@
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion rootProject.ext.android.compileSdkVersion
+ // buildToolsVersion rootProject.ext.android.buildToolsVersion
+ defaultConfig {
+ minSdkVersion rootProject.ext.android.minSdkVersion
+ targetSdkVersion rootProject.ext.android.targetSdkVersion
+ versionCode Integer.valueOf(VERSION_CODE)
+ versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION")
+
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles "consumer-rules.pro"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: "libs", include: ["*.jar"])
+ implementation rootProject.ext.dependencies.arouter
+
+ api rootProject.ext.dependencies.socketsdk
+ api rootProject.ext.dependencies.socketsdkconnsvrprotoco
+ api rootProject.ext.dependencies.socketsdkprotobufjava
+ implementation rootProject.ext.dependencies.accountsdk
+
+ if (Boolean.valueOf(RELEASE)) {
+ implementation rootProject.ext.dependencies.mogoutils
+ implementation rootProject.ext.dependencies.mogocommons
+ implementation rootProject.ext.dependencies.mogoserviceapi
+ } else {
+ implementation project(":foudations:mogo-utils")
+ implementation project(":foudations:mogo-commons")
+ implementation project(":services:mogo-service-api")
+ }
+
+}
+
+apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
\ No newline at end of file
diff --git a/foudations/mogo-base-services-apk/consumer-rules.pro b/foudations/mogo-base-services-apk/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/foudations/mogo-base-services-apk/gradle.properties b/foudations/mogo-base-services-apk/gradle.properties
new file mode 100644
index 0000000000..aae1d6638c
--- /dev/null
+++ b/foudations/mogo-base-services-apk/gradle.properties
@@ -0,0 +1,3 @@
+GROUP=com.mogo.base
+POM_ARTIFACT_ID=services-apk
+VERSION_CODE=1
diff --git a/foudations/mogo-base-services-apk/proguard-rules.pro b/foudations/mogo-base-services-apk/proguard-rules.pro
new file mode 100644
index 0000000000..481bb43481
--- /dev/null
+++ b/foudations/mogo-base-services-apk/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/foudations/mogo-base-services-apk/src/androidTest/java/com/mogo/base/services/apk/ExampleInstrumentedTest.java b/foudations/mogo-base-services-apk/src/androidTest/java/com/mogo/base/services/apk/ExampleInstrumentedTest.java
new file mode 100644
index 0000000000..3588462fba
--- /dev/null
+++ b/foudations/mogo-base-services-apk/src/androidTest/java/com/mogo/base/services/apk/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.mogo.base.services.apk;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith( AndroidJUnit4.class )
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals( "com.mogo.base.services.apk.test", appContext.getPackageName() );
+ }
+}
\ No newline at end of file
diff --git a/foudations/mogo-base-services-apk/src/main/AndroidManifest.xml b/foudations/mogo-base-services-apk/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..a82c409551
--- /dev/null
+++ b/foudations/mogo-base-services-apk/src/main/AndroidManifest.xml
@@ -0,0 +1,5 @@
+
+
+ /
+
\ No newline at end of file
diff --git a/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/locationinfo/MogoLocationInfoServices.java b/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/locationinfo/MogoLocationInfoServices.java
new file mode 100644
index 0000000000..5a6c31d624
--- /dev/null
+++ b/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/locationinfo/MogoLocationInfoServices.java
@@ -0,0 +1,63 @@
+package com.mogo.base.services.locationinfo;
+
+import android.content.Context;
+
+import androidx.annotation.Keep;
+
+import com.mogo.map.location.MogoLocation;
+import com.mogo.service.locationinfo.IMogoLocationInfoService;
+import com.mogo.utils.logger.Logger;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/7/16
+ *
+ * 位置服务
+ */
+@Keep
+class MogoLocationInfoServices implements IMogoLocationInfoService {
+
+ private static final String TAG = "MogoLocationInfoServices-apk";
+
+ private static volatile MogoLocationInfoServices sInstance;
+
+ private MogoLocationInfoServices() {
+ }
+
+ @Keep
+ public static MogoLocationInfoServices getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( MogoLocationInfoServices.class ) {
+ if ( sInstance == null ) {
+ sInstance = new MogoLocationInfoServices();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ @Override
+ public void provideLocation( MogoLocation location ) {
+ Logger.d( TAG, "apk - provideLocation" );
+ }
+
+ @Override
+ public void start() {
+ Logger.d( TAG, "apk - start" );
+ }
+
+ @Override
+ public void stop() {
+ Logger.d( TAG, "apk - stop" );
+ }
+
+ @Override
+ public void init( Context context ) {
+ Logger.d( TAG, "apk - init" );
+ }
+}
diff --git a/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/passport/PassportManager.java b/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/passport/PassportManager.java
new file mode 100644
index 0000000000..5090b53910
--- /dev/null
+++ b/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/passport/PassportManager.java
@@ -0,0 +1,87 @@
+package com.mogo.base.services.passport;
+
+import android.content.Context;
+
+import androidx.annotation.Keep;
+
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.commons.storage.SpStorage;
+import com.mogo.service.passport.IMogoPassportManager;
+import com.mogo.service.passport.IMogoTicketCallback;
+import com.mogo.utils.logger.Logger;
+import com.zhidao.account.sdk.AccountClientManager;
+import com.zhidao.account.sdk.callback.TicketInfoCallback;
+import com.zhidao.account.sdk.network.NetEnvironManager;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/7/16
+ *
+ * 描述
+ */
+@Keep
+class PassportManager implements IMogoPassportManager {
+
+ private static final String TAG = "PassportManager-apk";
+
+ private static volatile PassportManager sInstance;
+
+ private PassportManager(){}
+
+ @Keep
+ public static PassportManager getInstance(){
+ if( sInstance == null ){
+ synchronized( PassportManager.class ) {
+ if( sInstance == null ){
+ sInstance = new PassportManager();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release(){
+ sInstance = null;
+ }
+
+ @Override
+ public void requestTicket( final IMogoTicketCallback callback ) {
+ getTicket( new TicketInfoCallback() {
+ @Override
+ public void onSuccess( String ticket ) {
+ Logger.d( TAG, "success" );
+ SpStorage.setTicket( ticket );
+ if ( callback != null ) {
+ callback.onSuccess( ticket );
+ }
+ }
+
+ @Override
+ public void onFailure( int code, String msg ) {
+ Logger.d( TAG, "fail" );
+ if ( callback != null ) {
+ callback.onError( code, msg );
+ }
+ }
+ } );
+ }
+
+ private static void getTicket( TicketInfoCallback callback ) {
+ if ( DebugConfig.isLauncher() ) {
+ AccountClientManager.getTicket( callback );
+ } else {
+ AccountClientManager.getAppTicket( callback );
+ }
+ }
+
+ @Override
+ public void init( Context context ) {
+ int mode = DebugConfig.getNetMode();
+ if ( mode == DebugConfig.NET_MODE_DEMO ) {
+ // 演示环境用 qa 的
+ mode = DebugConfig.NET_MODE_QA;
+ }
+ AccountClientManager.init( context.getApplicationContext(), mode, NetEnvironManager.OS_2C, "os2.0-launcher" );
+ }
+}
diff --git a/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/socket/SocketManager.java b/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/socket/SocketManager.java
new file mode 100644
index 0000000000..f2db841a0a
--- /dev/null
+++ b/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/socket/SocketManager.java
@@ -0,0 +1,224 @@
+package com.mogo.base.services.socket;
+
+import android.content.Context;
+
+import androidx.annotation.Keep;
+
+import com.google.protobuf.ByteString;
+import com.google.protobuf.InvalidProtocolBufferException;
+import com.mogo.service.connection.IMogoMsgAckListener;
+import com.mogo.service.connection.IMogoOnMessageListener;
+import com.mogo.service.connection.IMogoSocketManager;
+import com.mogo.service.connection.MsgBody;
+import com.mogo.utils.logger.Logger;
+import com.mogo.utils.network.utils.GsonUtil;
+import com.zhidao.ptech.connsvr.commom.protocol.MogoCommon;
+import com.zhidao.ptech.connsvr.protocol.MogoConnsvr;
+import com.zhidao.socketsdk.manager.OnSocketAckCallback;
+import com.zhidao.socketsdk.manager.OnSocketReceiveCallback;
+import com.zhidao.socketsdk.manager.SocketConnManager;
+import com.zhidao.socketsdk.manager.SocketConnManagerImpl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-31
+ *
+ * 长链实现:基于 netty
+ */
+@Keep
+public class SocketManager implements IMogoSocketManager, OnSocketReceiveCallback, OnSocketAckCallback {
+
+ private static final String TAG = "SocketManager-apk";
+
+ public static final int MSG_PRODUCT_LINE = MogoCommon.Product.mogoBussiness_VALUE;
+ private static final int MSG_HEADER_TYPE = MogoConnsvr.MsgType.mogoMsgTypeDispatchSvrNoRspReq_VALUE;
+
+ private static volatile SocketManager sInstance;
+
+ private SocketManager( Context context ) {
+ mSocketConnManager = SocketConnManagerImpl.getInstance( context );
+ mSocketConnManager.addSocketMessageCallback( this );
+ mSocketConnManager.addSocketAckCallback( this );
+ }
+
+ @Keep
+ public static SocketManager getInstance( Context context ) {
+ if ( sInstance == null ) {
+ synchronized ( SocketManager.class ) {
+ if ( sInstance == null ) {
+ sInstance = new SocketManager( context );
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ /**
+ * 管理消息分发
+ *
+ * key - msgType
+ */
+ private Map< Integer, List< IMogoOnMessageListener > > mListeners = new ConcurrentHashMap<>();
+
+ /**
+ * 管理消息回执
+ *
+ * key - msgId
+ */
+ private Map< Long, IMogoMsgAckListener > mAckListeners = new ConcurrentHashMap<>();
+
+
+ private SocketConnManager mSocketConnManager;
+ public static final int MAX_CAP = 64; //保证充足的容量应对非常延时的推送
+ private ArrayList< Long > mReceivedMsgId = new ArrayList<>( MAX_CAP );
+ private int mCurrentIndex = 0;
+
+ @Override
+ public void init( Context context, String appId ) {
+ if ( mSocketConnManager != null ) {
+ mSocketConnManager.init( appId );
+ }
+ }
+
+ @Override
+ public void onMessageReceived( byte[] content, long msgId ) {
+ try {
+ MogoConnsvr.Payload payload = MogoConnsvr.Payload.parseFrom( content );
+ int msgType = payload.getMsgType();
+ Logger.d( TAG, "received msg type = %d", msgType );
+ List< IMogoOnMessageListener > listeners = mListeners.get( msgType );
+ if ( listeners != null && !listeners.isEmpty() ) {
+ Iterator< IMogoOnMessageListener > iterator = listeners.iterator();
+ if ( msgId != 0 ) { //兼容老版本
+ if ( mReceivedMsgId.contains( msgId ) ) { // 避免消息重发
+ return;
+ }
+ cacheLastReceivedMsgId( msgId );
+ }
+ Object object = null;
+ while ( iterator.hasNext() ) {
+ IMogoOnMessageListener listener = iterator.next();
+ if ( object == null ) {
+ object = GsonUtil.objectFromJson( payload.getPayload().toStringUtf8(), listener.target() );
+ }
+ if ( listener != null ) {
+ Logger.d( TAG, "received msgId = %s, content = %s", msgId, payload.getPayload().toStringUtf8() );
+ listener.onMsgReceived( object );
+ }
+ }
+ }
+ } catch ( InvalidProtocolBufferException e ) {
+ Logger.e( TAG, e, "parse msg error." );
+ }
+ }
+
+ private void cacheLastReceivedMsgId( long msgId ) {
+ if ( msgId == 0 ) {
+ return;
+ }
+ synchronized ( this ){
+ mReceivedMsgId.add( mCurrentIndex % MAX_CAP, msgId );
+ mCurrentIndex++;
+ }
+ }
+
+ @Override
+ public void onAck( byte[] headerBytes, byte[] payloadBytes ) {
+ try {
+ MogoConnsvr.Header header = MogoConnsvr.Header.parseFrom( headerBytes );
+ int msgType = header.getMsgType();
+ String appId = header.getAppId();
+ int productLine = header.getProductLine();
+ long msgId = header.getMsgId();
+ IMogoMsgAckListener listener = mAckListeners.remove( msgId );
+ if ( listener != null ) {
+ listener.onAck( msgId );
+ }
+ Logger.d( TAG, "send message success: msgType = %d, appId = %s, productLine = %d", msgType, appId, productLine );
+ } catch ( InvalidProtocolBufferException e ) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void registerOnMessageListener( int msgType, IMogoOnMessageListener listener ) {
+ if ( mListeners.containsKey( msgType ) ) {
+ Logger.w( TAG, "msgType %d is exist.", msgType );
+ }
+ if ( !mListeners.containsKey( msgType ) ) {
+ mListeners.put( msgType, new ArrayList< IMogoOnMessageListener >() );
+ }
+ mListeners.get( msgType ).add( listener );
+ }
+
+ @Override
+ public void unregisterOnMessageListener( int msgType ) {
+ mListeners.remove( msgType );
+ }
+
+ @Override
+ public void unregisterOnMessageListener( int msgType, IMogoOnMessageListener listener ) {
+ if ( listener == null ) {
+ return;
+ }
+ if ( !mListeners.containsKey( msgType ) ) {
+ return;
+ }
+ List< IMogoOnMessageListener > listeners = mListeners.get( msgType );
+ if ( listeners != null && listeners.contains( listener ) ) {
+ listeners.remove( listener );
+ }
+ }
+
+ @Override
+ public void sendMsg( MsgBody body, IMogoMsgAckListener listener ) {
+ Logger.d( TAG, "sendMsg." );
+ if ( mSocketConnManager != null ) {
+ if ( mSocketConnManager.isConnected() ) {
+ Logger.d( TAG, "isConnected." );
+ final byte[] pb = convertToPBBytes( body.getMsgType(), objectToBytes( body.getContent() ) );
+ mSocketConnManager.sendPayload(
+ MSG_PRODUCT_LINE,
+ pb,
+ MSG_HEADER_TYPE,
+ body.isAck(),
+ body.getMsgId()
+ );
+ mAckListeners.put( body.getMsgId(), listener );
+ } else {
+ Logger.e( TAG, "sendMsg error, connect is lost." );
+ }
+ } else {
+ Logger.e( TAG, "sendMsg error, client is null." );
+ }
+ }
+
+ public byte[] objectToBytes( Object obj ) {
+ String jsonStr = GsonUtil.jsonFromObject( obj );
+ return jsonStr.getBytes();
+ }
+
+ private byte[] convertToPBBytes( int msgType, byte[] payloadBytes ) {
+ MogoConnsvr.Payload payloadData = MogoConnsvr.Payload.newBuilder()
+ .setMsgType( msgType )
+ .setPayload( ByteString.copyFrom( payloadBytes ) ).build();
+ return payloadData.toByteArray();
+ }
+
+ public synchronized void release() {
+ mListeners.clear();
+ mListeners = null;
+ sInstance = null;
+ }
+
+
+ @Override
+ public void init( Context context ) {
+ }
+}
diff --git a/foudations/mogo-base-services-apk/src/test/java/com/mogo/base/services/apk/ExampleUnitTest.java b/foudations/mogo-base-services-apk/src/test/java/com/mogo/base/services/apk/ExampleUnitTest.java
new file mode 100644
index 0000000000..7b81601a73
--- /dev/null
+++ b/foudations/mogo-base-services-apk/src/test/java/com/mogo/base/services/apk/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.mogo.base.services.apk;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals( 4, 2 + 2 );
+ }
+}
\ No newline at end of file
diff --git a/foudations/mogo-base-services-sdk/.gitignore b/foudations/mogo-base-services-sdk/.gitignore
new file mode 100644
index 0000000000..42afabfd2a
--- /dev/null
+++ b/foudations/mogo-base-services-sdk/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/foudations/mogo-base-services-sdk/README.md b/foudations/mogo-base-services-sdk/README.md
new file mode 100644
index 0000000000..d5fa09de5b
--- /dev/null
+++ b/foudations/mogo-base-services-sdk/README.md
@@ -0,0 +1,3 @@
+## sdk实现功能
+
+脱离基础服务apk实现对应功能:位置上报、长连接、passport
\ No newline at end of file
diff --git a/foudations/mogo-base-services-sdk/build.gradle b/foudations/mogo-base-services-sdk/build.gradle
new file mode 100644
index 0000000000..1dd7e70249
--- /dev/null
+++ b/foudations/mogo-base-services-sdk/build.gradle
@@ -0,0 +1,53 @@
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion rootProject.ext.android.compileSdkVersion
+ // buildToolsVersion rootProject.ext.android.buildToolsVersion
+ defaultConfig {
+ minSdkVersion rootProject.ext.android.minSdkVersion
+ targetSdkVersion rootProject.ext.android.targetSdkVersion
+ versionCode Integer.valueOf(VERSION_CODE)
+ versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION")
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles "consumer-rules.pro"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: "libs", include: ["*.jar"])
+ implementation rootProject.ext.dependencies.arouter
+ // 上报位置
+ implementation 'com.zhidao.locupload:loc-upload-sdk:1.0.6'
+ // 长链
+ implementation 'com.zhidao.socket:built-in-socket:1.0.11'
+ // passport
+ implementation 'com.zhidao.tcloginsdk:tclogin:1.0.6'
+
+ annotationProcessor 'com.elegant.spi:compiler:1.0.3'
+
+
+ if (Boolean.valueOf(RELEASE)) {
+ implementation rootProject.ext.dependencies.mogoutils
+ implementation rootProject.ext.dependencies.mogocommons
+ implementation rootProject.ext.dependencies.mogoserviceapi
+ } else {
+ implementation project(":foudations:mogo-utils")
+ implementation project(":foudations:mogo-commons")
+ implementation project(":services:mogo-service-api")
+ }
+}
+
+apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
\ No newline at end of file
diff --git a/foudations/mogo-base-services-sdk/consumer-rules.pro b/foudations/mogo-base-services-sdk/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/foudations/mogo-base-services-sdk/gradle.properties b/foudations/mogo-base-services-sdk/gradle.properties
new file mode 100644
index 0000000000..a753d03b00
--- /dev/null
+++ b/foudations/mogo-base-services-sdk/gradle.properties
@@ -0,0 +1,3 @@
+GROUP=com.mogo.connection
+POM_ARTIFACT_ID=mogo-base-services-sdk
+VERSION_CODE=1
diff --git a/foudations/mogo-base-services-sdk/proguard-rules.pro b/foudations/mogo-base-services-sdk/proguard-rules.pro
new file mode 100644
index 0000000000..481bb43481
--- /dev/null
+++ b/foudations/mogo-base-services-sdk/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/foudations/mogo-base-services-sdk/src/androidTest/java/com/mogo/base/services/ExampleInstrumentedTest.java b/foudations/mogo-base-services-sdk/src/androidTest/java/com/mogo/base/services/ExampleInstrumentedTest.java
new file mode 100644
index 0000000000..856a560f77
--- /dev/null
+++ b/foudations/mogo-base-services-sdk/src/androidTest/java/com/mogo/base/services/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.mogo.base.services;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith( AndroidJUnit4.class )
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals( "com.mogo.base.services.test", appContext.getPackageName() );
+ }
+}
\ No newline at end of file
diff --git a/foudations/mogo-base-services-sdk/src/main/AndroidManifest.xml b/foudations/mogo-base-services-sdk/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..d7ee25b198
--- /dev/null
+++ b/foudations/mogo-base-services-sdk/src/main/AndroidManifest.xml
@@ -0,0 +1,5 @@
+
+
+ /
+
\ No newline at end of file
diff --git a/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/locationinfo/MogoLocationInfoServices.java b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/locationinfo/MogoLocationInfoServices.java
new file mode 100644
index 0000000000..754ab1cbfa
--- /dev/null
+++ b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/locationinfo/MogoLocationInfoServices.java
@@ -0,0 +1,98 @@
+package com.mogo.base.services.locationinfo;
+
+import android.content.Context;
+
+import androidx.annotation.Keep;
+
+import com.elegant.spi.annotations.Service;
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.map.location.MogoLocation;
+import com.mogo.service.locationinfo.IMogoLocationInfoService;
+import com.mogo.utils.logger.Logger;
+import com.zhidao.locupload.LocEnvironment;
+import com.zhidao.locupload.LocUploadConfig;
+import com.zhidao.locupload.LocUploadManager;
+import com.zhidao.locupload.Platform;
+import com.zhidao.locupload.location.LocationServiceProvider;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/7/16
+ *
+ * 位置服务
+ */
+@Keep
+class MogoLocationInfoServices implements IMogoLocationInfoService {
+
+ private static final String TAG = "MogoLocationInfoServices-sdk";
+
+ private static volatile MogoLocationInfoServices sInstance;
+ private MogoLocation mLocation;
+
+ private MogoLocationInfoServices() {
+ }
+
+ @Keep
+ public static MogoLocationInfoServices getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( MogoLocationInfoServices.class ) {
+ if ( sInstance == null ) {
+ sInstance = new MogoLocationInfoServices();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ @Override
+ public void provideLocation( MogoLocation location ) {
+ mLocation = location;
+ Logger.d(TAG, "sdk - provideLocation");
+ }
+
+ public MogoLocation getLocation() {
+ return mLocation;
+ }
+
+ @Override
+ public void start() {
+ LocUploadManager.getInstance().startUpload();
+ Logger.d(TAG, "sdk - start");
+ }
+
+ @Override
+ public void stop() {
+ LocUploadManager.getInstance().stopUpload();
+ Logger.d(TAG, "sdk - stop");
+ }
+
+ @Override
+ public void init( Context context ) {
+ LocUploadConfig.instance().
+ setAppId( "dataCrawler" ).
+ setContext( context.getApplicationContext() ).
+ setLocEnvironment( getEnvironment() ).
+ setLoggable( DebugConfig.isDebug() ).
+ setPlatform( Platform.car ).
+ setLocInterval( 2000L );
+ Logger.d(TAG, "sdk - init");
+ }
+
+ private LocEnvironment getEnvironment() {
+ switch ( DebugConfig.getNetMode() ) {
+ case 1:
+ return LocEnvironment.dev;
+ case 2:
+ case 4:
+ return LocEnvironment.qa;
+ case 3:
+ default:
+ return LocEnvironment.release;
+ }
+ }
+}
diff --git a/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/locationinfo/MogoLocationSource.java b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/locationinfo/MogoLocationSource.java
new file mode 100644
index 0000000000..844abb4a98
--- /dev/null
+++ b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/locationinfo/MogoLocationSource.java
@@ -0,0 +1,133 @@
+package com.mogo.base.services.locationinfo;
+
+import com.elegant.spi.annotations.Service;
+import com.zhidao.locupload.location.LocationServiceProvider;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/7/16
+ *
+ * 描述
+ */
+@Service( value = LocationServiceProvider.class )
+class MogoLocationSource extends LocationServiceProvider {
+
+ @Override
+ public float getBearing() {
+ if ( MogoLocationInfoServices.getInstance().getLocation() != null ) {
+ return MogoLocationInfoServices.getInstance().getLocation().getBearing();
+ }
+ return 0;
+ }
+
+ @Override
+ public float getAccuracy() {
+ if ( MogoLocationInfoServices.getInstance().getLocation() != null ) {
+ return MogoLocationInfoServices.getInstance().getLocation().getAccuracy();
+ }
+ return 0;
+ }
+
+ @Override
+ public String getProvider() {
+ if ( MogoLocationInfoServices.getInstance().getLocation() != null ) {
+ return MogoLocationInfoServices.getInstance().getLocation().getProvider();
+ }
+ return null;
+ }
+
+ @Override
+ public float getSpeed() {
+ if ( MogoLocationInfoServices.getInstance().getLocation() != null ) {
+ return MogoLocationInfoServices.getInstance().getLocation().getSpeed();
+ }
+ return 0;
+ }
+
+ @Override
+ public double getAltitude() {
+ if ( MogoLocationInfoServices.getInstance().getLocation() != null ) {
+ return MogoLocationInfoServices.getInstance().getLocation().getAltitude();
+ }
+ return 0;
+ }
+
+ @Override
+ public String getAdCode() {
+ if ( MogoLocationInfoServices.getInstance().getLocation() != null ) {
+ return MogoLocationInfoServices.getInstance().getLocation().getAdCode();
+ }
+ return null;
+ }
+
+ @Override
+ public int getLocType() {
+ if ( MogoLocationInfoServices.getInstance().getLocation() != null ) {
+ return MogoLocationInfoServices.getInstance().getLocation().getLocType();
+ }
+ return 0;
+ }
+
+ @Override
+ public double getLatitude() {
+ if ( MogoLocationInfoServices.getInstance().getLocation() != null ) {
+ return MogoLocationInfoServices.getInstance().getLocation().getLatitude();
+ }
+ return 0;
+ }
+
+ @Override
+ public double getLongitude() {
+ if ( MogoLocationInfoServices.getInstance().getLocation() != null ) {
+ return MogoLocationInfoServices.getInstance().getLocation().getLongitude();
+ }
+ return 0;
+ }
+
+ @Override
+ public long getTime() {
+ if ( MogoLocationInfoServices.getInstance().getLocation() != null ) {
+ return MogoLocationInfoServices.getInstance().getLocation().getTime();
+ }
+ return 0;
+ }
+
+ @Override
+ public String getCityCode() {
+ if ( MogoLocationInfoServices.getInstance().getLocation() != null ) {
+ return MogoLocationInfoServices.getInstance().getLocation().getCityCode();
+ }
+ return null;
+ }
+
+ @Override
+ public String getCityName() {
+ if ( MogoLocationInfoServices.getInstance().getLocation() != null ) {
+ return MogoLocationInfoServices.getInstance().getLocation().getCityName();
+ }
+ return null;
+ }
+
+ @Override
+ public int getGpsAccuracyStatus() {
+ if ( MogoLocationInfoServices.getInstance().getLocation() != null ) {
+ return MogoLocationInfoServices.getInstance().getLocation().getGpsAccuracyStatus();
+ }
+ return 0;
+ }
+
+ @Override
+ public int getSatellites() {
+ if ( MogoLocationInfoServices.getInstance().getLocation() != null ) {
+ return MogoLocationInfoServices.getInstance().getLocation().getSatellite();
+ }
+ return 0;
+ }
+
+ @Override
+ public int getCarStatus() {
+ // 常开状态
+ return 1;
+ }
+}
diff --git a/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/passport/PassportManager.java b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/passport/PassportManager.java
new file mode 100644
index 0000000000..184b63c7a6
--- /dev/null
+++ b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/passport/PassportManager.java
@@ -0,0 +1,101 @@
+package com.mogo.base.services.passport;
+
+import android.content.Context;
+
+import androidx.annotation.Keep;
+
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.commons.storage.SpStorage;
+import com.mogo.service.passport.IMogoPassportManager;
+import com.mogo.service.passport.IMogoTicketCallback;
+import com.mogo.utils.logger.Logger;
+import com.zhidao.accountsdk.manager.CarPadClientManagerImpl;
+import com.zhidao.accountsdk.manager.TicketInfoCallback;
+import com.zhidao.accountsdk.network.NetEnvironManager;
+import com.zhidao.tcloginsdk.ToCLoginManagerImpl;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/7/16
+ *
+ * 描述
+ */
+@Keep
+class PassportManager implements IMogoPassportManager {
+
+ private static final String TAG = "PassportManager-sdk";
+ private Context mContext;
+
+ private static volatile PassportManager sInstance;
+
+ private PassportManager(){}
+
+ @Keep
+ public static PassportManager getInstance(){
+ if( sInstance == null ){
+ synchronized( PassportManager.class ) {
+ if( sInstance == null ){
+ sInstance = new PassportManager();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release(){
+ sInstance = null;
+ }
+
+ @Override
+ public void requestTicket( final IMogoTicketCallback callback ) {
+ getTicket( new TicketInfoCallback() {
+ @Override
+ public void onSuccess( String ticket ) {
+ Logger.d( TAG, "success" );
+ SpStorage.setTicket( ticket );
+ if ( callback != null ) {
+ callback.onSuccess( ticket );
+ }
+ }
+
+ @Override
+ public void onFailure( int code ) {
+ Logger.d( TAG, "fail" );
+ if ( callback != null ) {
+ callback.onError( code, "error." );
+ }
+ }
+ } );
+ }
+
+ private void getTicket( TicketInfoCallback callback ) {
+ CarPadClientManagerImpl.getInstance( mContext ).getTicket( "os2.0-launcher", new TicketInfoCallback() {
+ @Override
+ public void onSuccess( String ticket ) {
+ if ( callback != null ) {
+ callback.onSuccess( ticket );
+ }
+ }
+
+ @Override
+ public void onFailure( int code ) {
+ if ( callback != null ) {
+ callback.onFailure( code );
+ }
+ }
+ } );
+ }
+
+ @Override
+ public void init( Context context ) {
+ mContext = context;
+ int mode = DebugConfig.getNetMode();
+ if ( mode == DebugConfig.NET_MODE_DEMO ) {
+ // 演示环境用 qa 的
+ mode = DebugConfig.NET_MODE_QA;
+ }
+ ToCLoginManagerImpl.getInstance( context ).setNetEnviron( mode );
+ ToCLoginManagerImpl.getInstance( context ).showLoginView();
+ }
+}
diff --git a/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/socket/SocketManager.java b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/socket/SocketManager.java
new file mode 100644
index 0000000000..cc3574b3bc
--- /dev/null
+++ b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/socket/SocketManager.java
@@ -0,0 +1,227 @@
+package com.mogo.base.services.socket;
+
+import android.content.Context;
+
+import androidx.annotation.Keep;
+import androidx.annotation.NonNull;
+
+import com.google.protobuf.ByteString;
+import com.google.protobuf.InvalidProtocolBufferException;
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.service.connection.IMogoMsgAckListener;
+import com.mogo.service.connection.IMogoOnMessageListener;
+import com.mogo.service.connection.IMogoSocketManager;
+import com.mogo.service.connection.MsgBody;
+import com.mogo.utils.logger.Logger;
+import com.mogo.utils.network.utils.GsonUtil;
+import com.zhidao.locupload.Platform;
+import com.zhidao.ptech.connsvr.protocol.MogoConnsvr;
+import com.zhidao.socket.Callback;
+import com.zhidao.socket.CallbackManager;
+import com.zhidao.socket.Environment;
+import com.zhidao.socket.SocketConfig;
+import com.zhidao.socket.SocketMessageDispatcher;
+import com.zhidao.socket.utils.RequestUtil;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/7/16
+ *
+ * 长链
+ */
+@Keep
+class SocketManager implements IMogoSocketManager, Callback {
+
+ private static final String TAG = "SocketManager-sdk";
+
+ private static volatile SocketManager sInstance;
+ private String mAppId;
+
+ public SocketManager( Context context ) {
+ CallbackManager.getInstance().register( this );
+ }
+
+ @Keep
+ public static SocketManager getInstance( Context context ) {
+ if ( sInstance == null ) {
+ synchronized ( SocketManager.class ) {
+ if ( sInstance == null ) {
+ sInstance = new SocketManager( context );
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ /**
+ * 管理消息分发
+ *
+ * key - msgType
+ */
+ private Map< Integer, List< IMogoOnMessageListener > > mListeners = new ConcurrentHashMap<>();
+
+ /**
+ * 管理消息回执
+ *
+ * key - msgId
+ */
+ private Map< Long, IMogoMsgAckListener > mAckListeners = new ConcurrentHashMap<>();
+
+
+ public static final int MAX_CAP = 64; //保证充足的容量应对非常延时的推送
+ private ArrayList< Long > mReceivedMsgId = new ArrayList<>( MAX_CAP );
+ private int mCurrentIndex = 0;
+
+ @Override
+ public void init( Context context, String appId ) {
+ mAppId = appId;
+ SocketConfig.instance()
+ .setAppContext( context.getApplicationContext() )
+ .setEnvironment( getEnvironment() )
+ .setClient( Platform.getClient( Platform.car ) )
+ .setAppId( appId )
+ .setDebug( DebugConfig.isDebug() );
+ SocketMessageDispatcher.getInstance().start( context );
+ }
+
+ private Environment getEnvironment() {
+ switch ( DebugConfig.getNetMode() ) {
+ case 1:
+ return Environment.dev;
+ case 2:
+ case 4:
+ return Environment.qa;
+ case 3:
+ default:
+ return Environment.release;
+ }
+ }
+
+ @Override
+ public void update( @NonNull CallbackManager manager, @NonNull byte[] content, String appId, long msgId ) {
+ try {
+ MogoConnsvr.Payload payload = MogoConnsvr.Payload.parseFrom( content );
+ int msgType = payload.getMsgType();
+ Logger.d( TAG, "received msg type = %d", msgType );
+ List< IMogoOnMessageListener > listeners = mListeners.get( msgType );
+ if ( listeners != null && !listeners.isEmpty() ) {
+ Iterator< IMogoOnMessageListener > iterator = listeners.iterator();
+ if ( msgId != 0 ) { //兼容老版本
+ if ( mReceivedMsgId.contains( msgId ) ) { // 避免消息重发
+ return;
+ }
+ cacheLastReceivedMsgId( msgId );
+ }
+ Object object = null;
+ while ( iterator.hasNext() ) {
+ IMogoOnMessageListener listener = iterator.next();
+ if ( object == null ) {
+ object = GsonUtil.objectFromJson( payload.getPayload().toStringUtf8(), listener.target() );
+ }
+ if ( listener != null ) {
+ Logger.d( TAG, "received msgId = %s, content = %s", msgId, payload.getPayload().toStringUtf8() );
+ listener.onMsgReceived( object );
+ }
+ }
+ }
+ } catch ( InvalidProtocolBufferException e ) {
+ Logger.e( TAG, e, "parse msg error." );
+ }
+ }
+
+ @Override
+ public void onAck( @NonNull CallbackManager manager, @NonNull byte[] headerBytes, byte[] content ) {
+ try {
+ MogoConnsvr.Header header = MogoConnsvr.Header.parseFrom( headerBytes );
+ int msgType = header.getMsgType();
+ String appId = header.getAppId();
+ int productLine = header.getProductLine();
+ long msgId = header.getMsgId();
+ IMogoMsgAckListener listener = mAckListeners.remove( msgId );
+ if ( listener != null ) {
+ listener.onAck( msgId );
+ }
+ Logger.d( TAG, "send message success: msgType = %d, appId = %s, productLine = %d", msgType, appId, productLine );
+ } catch ( InvalidProtocolBufferException e ) {
+ e.printStackTrace();
+ }
+ }
+
+ private void cacheLastReceivedMsgId( long msgId ) {
+ if ( msgId == 0 ) {
+ return;
+ }
+ synchronized ( this ) {
+ mReceivedMsgId.add( mCurrentIndex % MAX_CAP, msgId );
+ mCurrentIndex++;
+ }
+ }
+
+ @Override
+ public void registerOnMessageListener( int msgType, IMogoOnMessageListener listener ) {
+ if ( mListeners.containsKey( msgType ) ) {
+ Logger.w( TAG, "msgType %d is exist.", msgType );
+ }
+ if ( !mListeners.containsKey( msgType ) ) {
+ mListeners.put( msgType, new ArrayList< IMogoOnMessageListener >() );
+ }
+ mListeners.get( msgType ).add( listener );
+ }
+
+ @Override
+ public void unregisterOnMessageListener( int msgType ) {
+ mListeners.remove( msgType );
+ }
+
+ @Override
+ public void unregisterOnMessageListener( int msgType, IMogoOnMessageListener listener ) {
+ if ( listener == null ) {
+ return;
+ }
+ if ( !mListeners.containsKey( msgType ) ) {
+ return;
+ }
+ List< IMogoOnMessageListener > listeners = mListeners.get( msgType );
+ if ( listeners != null && listeners.contains( listener ) ) {
+ listeners.remove( listener );
+ }
+ }
+
+ @Override
+ public void sendMsg( MsgBody body, IMogoMsgAckListener listener ) {
+ Logger.d( TAG, "sendMsg." );
+ final byte[] pb = convertToPBBytes( body.getMsgType(), objectToBytes( body.getContent() ) );
+ RequestUtil.sendPayloadData( mAppId, 2, pb, 1, true, System.currentTimeMillis() );
+ }
+
+ public byte[] objectToBytes( Object obj ) {
+ String jsonStr = GsonUtil.jsonFromObject( obj );
+ return jsonStr.getBytes();
+ }
+
+ private byte[] convertToPBBytes( int msgType, byte[] payloadBytes ) {
+ MogoConnsvr.Payload payloadData = MogoConnsvr.Payload.newBuilder()
+ .setMsgType( msgType )
+ .setPayload( ByteString.copyFrom( payloadBytes ) ).build();
+ return payloadData.toByteArray();
+ }
+
+ public synchronized void release() {
+ mListeners.clear();
+ mListeners = null;
+ sInstance = null;
+ }
+
+
+ @Override
+ public void init( Context context ) {
+ }
+
+}
diff --git a/foudations/mogo-base-services-sdk/src/test/java/com/mogo/base/services/ExampleUnitTest.java b/foudations/mogo-base-services-sdk/src/test/java/com/mogo/base/services/ExampleUnitTest.java
new file mode 100644
index 0000000000..ec74ef013f
--- /dev/null
+++ b/foudations/mogo-base-services-sdk/src/test/java/com/mogo/base/services/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.mogo.base.services;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals( 4, 2 + 2 );
+ }
+}
\ No newline at end of file
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 943ad1417d..c38e5425c7 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
@@ -1,9 +1,7 @@
package com.mogo.commons;
import android.app.Application;
-import android.content.Context;
import android.text.TextUtils;
-import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
@@ -20,11 +18,7 @@ import com.mogo.commons.network.X509TrustManagerImpl;
import com.mogo.commons.storage.SpStorage;
import com.mogo.utils.ThreadPoolService;
import com.mogo.utils.TipToast;
-import com.mogo.utils.logger.Logger;
import com.mogo.utils.network.NetConfig;
-import com.zhidao.account.sdk.AccountClientManager;
-import com.zhidao.account.sdk.callback.TicketInfoCallback;
-import com.zhidao.account.sdk.network.NetEnvironManager;
import java.io.IOException;
import java.security.SecureRandom;
@@ -98,7 +92,6 @@ public class AbsMogoApplication extends Application {
private void asyncInit() {
ThreadPoolService.execute( () -> {
initNetConfig();
- initAccountSdk();
// 初始化toast
// 初始化埋点
Analytics.getInstance().start( sApp );
@@ -109,37 +102,42 @@ public class AbsMogoApplication extends Application {
AnalyticsConfig.getInstance( sApp ).shouldLog( DebugConfig.isDebug() );
Devices.init( getApp() );
Devices.checkBindState();
+ asyncInitImpl();
} );
}
- private static void initAccountSdk() {
- int mode = DebugConfig.getNetMode();
- if ( mode == DebugConfig.NET_MODE_DEMO ) {
- // 演示环境用 qa 的
- mode = DebugConfig.NET_MODE_QA;
- }
- AccountClientManager.init( sApp, mode, NetEnvironManager.OS_2C, "os2.0-launcher" );
- getTicket( new TicketInfoCallback() {
- @Override
- public void onSuccess( String ticket ) {
- SpStorage.setTicket( ticket );
- Logger.w( TAG, "request ticket success" );
- }
+ protected void asyncInitImpl(){
- @Override
- public void onFailure( int code, String msg ) {
- Logger.w( TAG, "request ticket error code = %d, msg = %s", code, msg );
- }
- } );
}
- private static void getTicket( TicketInfoCallback callback ) {
- if ( DebugConfig.isLauncher() ) {
- AccountClientManager.getTicket( callback );
- } else {
- AccountClientManager.getAppTicket( callback );
- }
- }
+// private static void initAccountSdk() {
+// int mode = DebugConfig.getNetMode();
+// if ( mode == DebugConfig.NET_MODE_DEMO ) {
+// // 演示环境用 qa 的
+// mode = DebugConfig.NET_MODE_QA;
+// }
+// AccountClientManager.init( sApp, mode, NetEnvironManager.OS_2C, "os2.0-launcher" );
+// getTicket( new TicketInfoCallback() {
+// @Override
+// public void onSuccess( String ticket ) {
+// SpStorage.setTicket( ticket );
+// Logger.w( TAG, "request ticket success" );
+// }
+//
+// @Override
+// public void onFailure( int code, String msg ) {
+// Logger.w( TAG, "request ticket error code = %d, msg = %s", code, msg );
+// }
+// } );
+// }
+//
+// private static void getTicket( TicketInfoCallback callback ) {
+// if ( DebugConfig.isLauncher() ) {
+// AccountClientManager.getTicket( callback );
+// } else {
+// AccountClientManager.getAppTicket( callback );
+// }
+// }
private static void initNetConfig() {
diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/network/Utils.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/Utils.java
index 21c8991b5a..f4040a23c5 100644
--- a/foudations/mogo-commons/src/main/java/com/mogo/commons/network/Utils.java
+++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/network/Utils.java
@@ -7,6 +7,7 @@ import android.telephony.CellLocation;
import android.telephony.TelephonyManager;
import android.telephony.cdma.CdmaCellLocation;
import android.telephony.gsm.GsmCellLocation;
+import android.text.TextUtils;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -55,11 +56,16 @@ public class Utils {
public static final String GET = "get";
public static final String GSM_SERIAL = "gsm.serial";
+ public static final String BYD_SERIAL = "ro.serialno";
public static final String FOTA_VERSION = "ro.fota.version";
public static final String PROPERTIES = "android.os.SystemProperties";
public static String getSn() {
- return getSystemProperties( GSM_SERIAL );
+ String sn = getSystemProperties( GSM_SERIAL );
+ if ( TextUtils.isEmpty( sn ) ) {
+ sn = getSystemProperties( BYD_SERIAL );
+ }
+ return sn;
}
public static String getFotaVersion() {
diff --git a/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/MsgBody.java b/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/MsgBody.java
deleted file mode 100644
index d2ff058a25..0000000000
--- a/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/MsgBody.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.mogo.connection.socket;
-
-import com.zhidao.ptech.connsvr.commom.protocol.MogoCommon;
-import com.zhidao.ptech.connsvr.protocol.MogoConnsvr;
-
-/**
- * @author congtaowang
- * @since 2019-12-31
- *
- * 描述
- */
-public class MsgBody {
-
- private int mMsgType;
-
- /**
- * 服务端分发,业务线
- */
- private int mProductLine = MogoCommon.Product.mogoBussiness_VALUE;
-
- /**
- *
- */
- private int mHeaderType = MogoConnsvr.MsgType.mogoMsgTypeDispatchSvrNoRspReq_VALUE;
-
- /**
- * 是否回执
- */
- private boolean mAck = false;
-
- /**
- * 消息ID
- */
- private final long mMsgId = System.currentTimeMillis();
-
- private Object mContent;
-
- public MsgBody msgType( int msgType ) {
- this.mMsgType = msgType;
- return this;
- }
-
- public MsgBody ack( boolean ack ) {
- this.mAck = ack;
- return this;
- }
-
- public MsgBody content( Object content ) {
- this.mContent = content;
- return this;
- }
-
- public int getMsgType() {
- return mMsgType;
- }
-
- public int getProductLine() {
- return mProductLine;
- }
-
- public int getHeaderType() {
- return mHeaderType;
- }
-
- public boolean ismAck() {
- return mAck;
- }
-
- public long getMsgId() {
- return mMsgId;
- }
-
- public Object getContent() {
- return mContent;
- }
-}
diff --git a/gradle.properties b/gradle.properties
index 148ba9b0ec..7f6d02c215 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -71,9 +71,9 @@ MOGO_MODULE_ONLINECAR_VERSION=1.0.3.2
# v2x
MOGO_MODULE_V2X_VERSION=1.2.9
# 推送
-MOGO_MODULE_PUSH_VERSION=1.1.5.6
+MOGO_MODULE_PUSH_VERSION=1.1.5.7
MOGO_MODULE_PUSH_BASE_VERSION=1.1.5.5
-MOGO_MODULE_PUSH_NOOP_VERSION=1.1.5.5
+MOGO_MODULE_PUSH_NOOP_VERSION=1.1.5.6
# 广告资源位
MOGO_MODULE_AD_CARD_VERSION=1.0.1
# 探路上报和分享模块
@@ -96,6 +96,10 @@ MOGO_MODULE_OBU_VERSION = 1.2.1.10-SNAPSHOT
MOGO_MODULE_SPLASH_VERSION = 1.0.0-SNAPSHOT
MOGO_MODULE_SPLASH_NOOP_VERSION = 1.0.0-SNAPSHOT
+# 基础服务实现:passport、socket、location
+MOGO_BASE_SERVICES_APK_VERSION = 1.0.0
+MOGO_BASE_SERVICES_SDK_VERSION = 1.0.0
+
## 产品库必备配置
applicationId=com.mogo.launcer
applicationName=IntelligentPilot
diff --git a/main-extensions/mogo-module-main-independent/src/main/res/values-xhdpi-1920x1000/dimens.xml b/main-extensions/mogo-module-main-independent/src/main/res/values-xhdpi-1920x1000/dimens.xml
new file mode 100644
index 0000000000..c436f9daca
--- /dev/null
+++ b/main-extensions/mogo-module-main-independent/src/main/res/values-xhdpi-1920x1000/dimens.xml
@@ -0,0 +1,5 @@
+
+
+ 635px
+ 366px
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java
index 0d4a626e29..5c67f3141e 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java
@@ -6,6 +6,7 @@ import android.transition.AutoTransition;
import android.transition.Transition;
import android.transition.TransitionManager;
import android.util.ArrayMap;
+import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
@@ -394,6 +395,11 @@ public class TopViewAnimHelper {
constraintSet.connect(naviBg.getId(), ConstraintSet.TOP,
R.id.module_entrance_id_top_motion_layout, ConstraintSet.TOP,
computeNaviMarginTop(params.height));
+
+ // 动态改变相关字体大小
+ tvNextDistance.setTextSize(TypedValue.COMPLEX_UNIT_PX,getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_textSize_small));
+ tvNextDistanceUnit.setTextSize(TypedValue.COMPLEX_UNIT_PX,getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_unit_textSize_small));
+
}
constraintSet.applyTo(topMotionLayout);
ivTurnIcon.getLayoutParams().height =
@@ -487,6 +493,9 @@ public class TopViewAnimHelper {
remainDistanceGroup.setVisibility(View.VISIBLE);
remainTimeGroup.setVisibility(View.VISIBLE);
arriveTimeGroup.setVisibility(View.VISIBLE);
+ tvNextDistance.setTextSize(TypedValue.COMPLEX_UNIT_PX,getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_textSize));
+ tvNextDistanceUnit.setTextSize(TypedValue.COMPLEX_UNIT_PX,getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_unit_textSize));
+
}
constraintSet.clone(topMotionLayout);
@@ -547,6 +556,9 @@ public class TopViewAnimHelper {
remainDistanceGroup.setVisibility(View.VISIBLE);
remainTimeGroup.setVisibility(View.VISIBLE);
arriveTimeGroup.setVisibility(View.VISIBLE);
+ tvNextDistance.setTextSize(TypedValue.COMPLEX_UNIT_PX,getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_textSize));
+ tvNextDistanceUnit.setTextSize(TypedValue.COMPLEX_UNIT_PX,getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_unit_textSize));
+
// 调整约束
constraintSet.clone(topMotionLayout);
constraintSet.clear(tvNextDistance.getId(), ConstraintSet.BOTTOM);
@@ -576,6 +588,8 @@ public class TopViewAnimHelper {
remainDistanceGroup.setVisibility(View.GONE);
remainTimeGroup.setVisibility(View.GONE);
arriveTimeGroup.setVisibility(View.GONE);
+ tvNextDistance.setTextSize(TypedValue.COMPLEX_UNIT_PX,getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_textSize_small));
+ tvNextDistanceUnit.setTextSize(TypedValue.COMPLEX_UNIT_PX,getDimen(R.dimen.module_ext_navi_info_panel_next_info_distance_unit_textSize_small));
// 调整约束
constraintSet.clone(topMotionLayout);
constraintSet.connect(tvNextDistance.getId(), ConstraintSet.BOTTOM,
@@ -655,7 +669,7 @@ public class TopViewAnimHelper {
}
private float getDimen(int resId) {
- return (int) topMotionLayout.getContext().getResources().getDimension(resId);
+ return (int) topMotionLayout.getContext().getResources().getDimensionPixelSize(resId);
}
private int computeNaviMarginTop(int height) {
diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml
index bae7449c91..542e47991f 100644
--- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml
+++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml
@@ -202,7 +202,7 @@
diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi-1920x1000/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi-1920x1000/dimens.xml
index 169a5f6e4e..0e3d697760 100644
--- a/modules/mogo-module-extensions/src/main/res/values-xhdpi-1920x1000/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi-1920x1000/dimens.xml
@@ -89,9 +89,11 @@
24px
40px
60px
+ 50px
12px
10px
40px
+ 30px
34px
24px
28px
diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
index 059f8fb764..b1e5bf7240 100644
--- a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
@@ -89,9 +89,11 @@
24px
40px
60px
+ 50px
12px
10px
40px
+ 30px
34px
24px
28px
diff --git a/modules/mogo-module-extensions/src/main/res/values/dimens.xml b/modules/mogo-module-extensions/src/main/res/values/dimens.xml
index a55c7a34a9..3b7a570ba8 100644
--- a/modules/mogo-module-extensions/src/main/res/values/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values/dimens.xml
@@ -91,9 +91,11 @@
13px
20px
32px
+ 32px
7px
5px
22px
+ 22px
18px
24px
diff --git a/modules/mogo-module-main/build.gradle b/modules/mogo-module-main/build.gradle
index e06cc617ba..2f686a9f62 100644
--- a/modules/mogo-module-main/build.gradle
+++ b/modules/mogo-module-main/build.gradle
@@ -50,7 +50,6 @@ dependencies {
api rootProject.ext.dependencies.mogoservice
api rootProject.ext.dependencies.moduleservice
api rootProject.ext.dependencies.moduleapps
- api rootProject.ext.dependencies.mogoconnection
api rootProject.ext.dependencies.moduleextensions
api rootProject.ext.dependencies.mogomoduleback
} else {
@@ -62,7 +61,6 @@ dependencies {
api project(':services:mogo-service-api')
api project(':services:mogo-service')
api project(':modules:mogo-module-apps')
- api project(':foudations:mogo-connection')
api project(':modules:mogo-module-extensions')
api project(':modules:mogo-module-back')
}
diff --git a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml
index c3a6b4463d..bcb2744c24 100644
--- a/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml
+++ b/modules/mogo-module-main/src/main/res/layout/module_main_activity_main.xml
@@ -43,12 +43,10 @@
+ android:layout_marginLeft="@dimen/module_main_id_entrance_fragment_container_marginLeft"
+ android:padding="@dimen/module_main_entrance_fragment_container_padding" />
+ * ticket 回调
+ */
+interface IMogoTicketCallback {
+
+ void onSuccess( String ticket );
+
+ void onError( int code, String msg );
+}
diff --git a/services/mogo-service/build.gradle b/services/mogo-service/build.gradle
index 2a95b0f6c7..8f434c63b9 100644
--- a/services/mogo-service/build.gradle
+++ b/services/mogo-service/build.gradle
@@ -47,7 +47,6 @@ dependencies {
implementation rootProject.ext.dependencies.mogoutils
implementation rootProject.ext.dependencies.mogocommons
implementation rootProject.ext.dependencies.mogoserviceapi
- implementation rootProject.ext.dependencies.mogoconnection
implementation rootProject.ext.dependencies.modulecommon
} else {
api project(":libraries:mogo-map")
@@ -55,7 +54,6 @@ dependencies {
implementation project(":foudations:mogo-utils")
implementation project(":foudations:mogo-commons")
implementation project(":services:mogo-service-api")
- implementation project(":foudations:mogo-connection")
implementation project(":modules:mogo-module-common")
}
}
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java
index b65fe03b70..7881bc7374 100644
--- a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java
@@ -5,7 +5,6 @@ import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.facade.template.IProvider;
import com.alibaba.android.arouter.launcher.ARouter;
-import com.mogo.connection.socket.SocketManager;
import com.mogo.service.IMogoServiceApis;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.adas.IMogoADASController;
@@ -23,6 +22,7 @@ import com.mogo.service.impl.intent.IntentManager;
import com.mogo.service.impl.singleton.SingletonsHolder;
import com.mogo.service.intent.IMogoIntentManager;
import com.mogo.service.launcher.IMogoLauncher;
+import com.mogo.service.locationinfo.IMogoLocationInfoService;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.module.IMogoActionManager;
import com.mogo.service.module.IMogoAddressManager;
@@ -32,6 +32,7 @@ import com.mogo.service.module.IMogoSearchManager;
import com.mogo.service.module.IMogoSettingManager;
import com.mogo.service.network.IMogoNetwork;
import com.mogo.service.obu.IMogoObuManager;
+import com.mogo.service.passport.IMogoPassportManager;
import com.mogo.service.share.IMogoShareManager;
import com.mogo.service.statusmanager.IMogoMsgCenter;
import com.mogo.service.statusmanager.IMogoStatusManager;
@@ -61,7 +62,7 @@ public class MogoServiceApis implements IMogoServiceApis {
@Override
public IMogoSocketManager getSocketManagerApi( Context context ) {
- return SocketManager.getInstance( context );
+ return getApiInstance( IMogoSocketManager.class, MogoServicePaths.PATH_SOCKET_MANAGER );
}
@Override
@@ -176,20 +177,30 @@ public class MogoServiceApis implements IMogoServiceApis {
@Override
public IMogoShareManager getShareManager() {
- return getApiInstance(IMogoShareManager.class,MogoServicePaths.PATH_SHARE);
+ return getApiInstance( IMogoShareManager.class, MogoServicePaths.PATH_SHARE );
}
@Override
public IMogoObuManager getObuManager() {
- return getApiInstance(IMogoObuManager.class, MogoServicePaths.PATH_OBU);
+ return getApiInstance( IMogoObuManager.class, MogoServicePaths.PATH_OBU );
}
@Override
public IEventPanelProvider getEventPanelManager() {
- return getApiInstance(IEventPanelProvider.class, MogoServicePaths.PATH_EVENT_PANEL);
+ return getApiInstance( IEventPanelProvider.class, MogoServicePaths.PATH_EVENT_PANEL );
}
- private static < T extends IProvider > T getApiInstance(Class< T > clazz, String path ) {
+ @Override
+ public IMogoLocationInfoService getLocationInfoApi() {
+ return getApiInstance( IMogoLocationInfoService.class, MogoServicePaths.PATH_LOCATION_INFO );
+ }
+
+ @Override
+ public IMogoPassportManager getPassportManagerApi() {
+ return getApiInstance( IMogoPassportManager.class, MogoServicePaths.PATH_PASSPORT );
+ }
+
+ private static < T extends IProvider > T getApiInstance( Class< T > clazz, String path ) {
T inst = SingletonsHolder.get( clazz );
if ( inst == null ) {
synchronized ( sLock ) {
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/connection/MogoSocketManager.java b/services/mogo-service/src/main/java/com/mogo/service/impl/connection/MogoSocketManager.java
index 1984aee994..ba4e8154e6 100644
--- a/services/mogo-service/src/main/java/com/mogo/service/impl/connection/MogoSocketManager.java
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/connection/MogoSocketManager.java
@@ -3,12 +3,14 @@ package com.mogo.service.impl.connection;
import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
-import com.mogo.connection.socket.SocketManager;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.connection.IMogoMsgAckListener;
import com.mogo.service.connection.IMogoOnMessageListener;
import com.mogo.service.connection.IMogoSocketManager;
import com.mogo.service.connection.MsgBody;
+import com.mogo.utils.logger.Logger;
+
+import java.lang.reflect.Method;
/**
* @author congtaowang
@@ -19,6 +21,7 @@ import com.mogo.service.connection.MsgBody;
@Route( path = MogoServicePaths.PATH_SOCKET_MANAGER )
public class MogoSocketManager implements IMogoSocketManager {
+ private static final String TAG = "MogoSocketManager";
private IMogoSocketManager mDelegate;
@Override
@@ -58,6 +61,18 @@ public class MogoSocketManager implements IMogoSocketManager {
@Override
public void init( Context context ) {
- mDelegate = SocketManager.getInstance( context );
+
+ try {
+ Class< ? > clazz = Class.forName( "com.mogo.base.services.socket.SocketManager" );
+ Method getInstanceMethod = clazz.getMethod( "getInstance", Context.class );
+ getInstanceMethod.setAccessible( true );
+ mDelegate = ( IMogoSocketManager ) getInstanceMethod.invoke( null, context );
+ } catch ( Exception e ) {
+ Logger.e( TAG, e, "error." );
+ }
+
+ if ( mDelegate != null ) {
+ mDelegate.init( context );
+ }
}
}
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/locationinfo/MogoLocationInfoService.java b/services/mogo-service/src/main/java/com/mogo/service/impl/locationinfo/MogoLocationInfoService.java
new file mode 100644
index 0000000000..9f5135aa35
--- /dev/null
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/locationinfo/MogoLocationInfoService.java
@@ -0,0 +1,64 @@
+package com.mogo.service.impl.locationinfo;
+
+import android.content.Context;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.mogo.map.location.MogoLocation;
+import com.mogo.service.MogoServicePaths;
+import com.mogo.service.locationinfo.IMogoLocationInfoService;
+import com.mogo.utils.logger.Logger;
+
+import java.lang.reflect.Method;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/7/16
+ *
+ * 描述
+ */
+@Route( path = MogoServicePaths.PATH_LOCATION_INFO )
+class MogoLocationInfoService implements IMogoLocationInfoService {
+
+ private static final String TAG = "MogoLocationInfoService";
+
+ private IMogoLocationInfoService mDelegate;
+
+ @Override
+ public void provideLocation( MogoLocation location ) {
+ if ( mDelegate != null ) {
+ mDelegate.provideLocation( location );
+ }
+ }
+
+ @Override
+ public void start() {
+ if ( mDelegate != null ) {
+ mDelegate.start();
+ }
+ }
+
+ @Override
+ public void stop() {
+ if ( mDelegate != null ) {
+ mDelegate.stop();
+ }
+ }
+
+ @Override
+ public void init( Context context ) {
+
+ try {
+ Class< ? > clazz = Class.forName( "com.mogo.base.services.locationinfo.MogoLocationInfoServices" );
+ Method getInstanceMethod = clazz.getMethod( "getInstance" );
+ getInstanceMethod.setAccessible( true );
+ mDelegate = ( IMogoLocationInfoService ) getInstanceMethod.invoke( null );
+ } catch ( Exception e ) {
+ Logger.e( TAG, e, "error." );
+ }
+
+ if ( mDelegate != null ) {
+ mDelegate.init( context );
+ }
+ }
+}
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/passport/MogoPassportManager.java b/services/mogo-service/src/main/java/com/mogo/service/impl/passport/MogoPassportManager.java
new file mode 100644
index 0000000000..b9f4aba0bf
--- /dev/null
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/passport/MogoPassportManager.java
@@ -0,0 +1,49 @@
+package com.mogo.service.impl.passport;
+
+import android.content.Context;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.mogo.service.MogoServicePaths;
+import com.mogo.service.connection.IMogoSocketManager;
+import com.mogo.service.passport.IMogoPassportManager;
+import com.mogo.service.passport.IMogoTicketCallback;
+import com.mogo.utils.logger.Logger;
+
+import java.lang.reflect.Method;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/7/16
+ *
+ * 描述
+ */
+@Route( path = MogoServicePaths.PATH_PASSPORT )
+class MogoPassportManager implements IMogoPassportManager {
+
+ private static final String TAG = "MogoPassportManager";
+
+ private IMogoPassportManager mDelegate;
+
+ @Override
+ public void requestTicket( IMogoTicketCallback callback ) {
+ if ( mDelegate != null ) {
+ mDelegate.requestTicket( callback );
+ }
+ }
+
+ @Override
+ public void init( Context context ) {
+ try {
+ Class< ? > clazz = Class.forName( "com.mogo.base.services.passport.PassportManager" );
+ Method getInstanceMethod = clazz.getMethod( "getInstance" );
+ getInstanceMethod.setAccessible( true );
+ mDelegate = ( IMogoPassportManager ) getInstanceMethod.invoke( null );
+ } catch ( Exception e ) {
+ Logger.e( TAG, e, "error." );
+ }
+ if ( mDelegate != null ) {
+ mDelegate.init( context );
+ }
+ }
+}
diff --git a/settings.gradle b/settings.gradle
index 517b853c59..57fe30c6f1 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,3 +1,5 @@
+include ':foudations:mogo-base-services-apk'
+include ':foudations:mogo-base-services-sdk'
include ':modules:mogo-module-splash-noop'
include ':modules:mogo-module-splash'
include ':modules:mogo-module-left-panel-noop'
@@ -25,7 +27,7 @@ include ':libraries:map-amap'
include ':libraries:mogo-map-api'
include ':modules:mogo-module-apps'
include ':modules:mogo-module-extensions'
-include ':foudations:mogo-connection'
+//include ':foudations:mogo-connection'
include ':modules:mogo-module-gps-simulator'
include ':modules:mogo-module-gps-simulator-debug'
include ':modules:mogo-module-gps-simulator-noop'
diff --git a/upload.sh b/upload.sh
index 90133449ee..ca7a1df0d9 100755
--- a/upload.sh
+++ b/upload.sh
@@ -4,7 +4,6 @@
./gradlew :foudations:mogo-commons:clean :foudations:mogo-commons:uploadArchives
./gradlew :libraries:mogo-map-api:clean :libraries:mogo-map-api:uploadArchives
./gradlew :services:mogo-service-api:clean :services:mogo-service-api:uploadArchives
-./gradlew :foudations:mogo-connection:clean :foudations:mogo-connection:uploadArchives
./gradlew :libraries:map-amap:clean :libraries:map-amap:uploadArchives
./gradlew :libraries:map-autonavi:clean :libraries:map-autonavi:uploadArchives
./gradlew :libraries:mogo-map:clean :libraries:mogo-map:uploadArchives
@@ -32,4 +31,6 @@
./gradlew :modules:mogo-module-left-panel:clean :modules:mogo-module-left-panel:uploadArchives
./gradlew :modules:mogo-module-left-panel-noop:clean :modules:mogo-module-left-panel-noop:uploadArchives
./gradlew :modules:mogo-module-byd:clean :modules:mogo-module-byd:uploadArchives
+./gradlew :foudations:mogo-base-services-apk:clean :foudations:mogo-base-services-apk:uploadArchives
+./gradlew :foudations:mogo-base-services-sdk:clean :foudations:mogo-base-services-sdk:uploadArchives