diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 8bda576128..3aa58b6658 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -20,9 +20,11 @@
+
+
diff --git a/app/build.gradle b/app/build.gradle
index f7fac3e35b..eeda922930 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -109,7 +109,10 @@ dependencies {
implementation rootProject.ext.dependencies.moduleadcard
implementation rootProject.ext.dependencies.moduleonlinecar
- implementation rootProject.ext.dependencies.moduleV2x
+ implementation rootProject.ext.dependencies.moduleV2x,{
+ exclude group:'com.mogo.module.carchatting',module:'module-carchatting'
+ exclude group:'com.mogo.module.carchatting',module:'module-carchatting-provider'
+ }
implementation rootProject.ext.dependencies.moduletanlu,{
exclude group:'com.mogo.module',module:'module-share'
}
@@ -120,12 +123,14 @@ dependencies {
implementation rootProject.ext.dependencies.modulecommon
implementation rootProject.ext.dependencies.modulesearch
implementation rootProject.ext.dependencies.mogomoduleback
+ implementation rootProject.ext.dependencies.mogomoduleguide
} else {
implementation project(':modules:mogo-module-main')
implementation project(':foudations:mogo-commons')
implementation project(':modules:mogo-module-common')
implementation project(':modules:mogo-module-search')
implementation project(':modules:mogo-module-back')
+ implementation project(':modules:mogo-module-guide')
}
}
diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java
index 2864bdbd21..f89feb66b1 100644
--- a/app/src/main/java/com/mogo/launcher/MogoApplication.java
+++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java
@@ -25,6 +25,9 @@ import com.mogo.service.connection.IMogoSocketManager;
import com.mogo.utils.logger.LogLevel;
import com.mogo.utils.logger.Logger;
+import static com.mogo.module.guide.GuideConstant.PATH_GUIDE_AGREEMENT_FRAGMENT;
+import static com.mogo.module.guide.GuideConstant.PATH_GUIDE_AGREEMENT_MODULE_NAME;
+
/**
* @author congtaowang
* @since 2019-12-18
@@ -42,7 +45,7 @@ public class MogoApplication extends AbsMogoApplication {
crashSystem.init();
//设置debug模式,日志不上传
crashSystem.setDebug(BuildConfig.DEBUG);
- Logger.init( BuildConfig.DEBUG ? LogLevel.DEBUG : LogLevel.OFF );
+ Logger.init(BuildConfig.DEBUG ? LogLevel.DEBUG : LogLevel.OFF);
//运营位卡片,需要默认显示,放在第一个加载
MogoModulePaths.addModule(new MogoModule(AdCardConstants.TAG, AdCardConstants.MODULE_NAME));
@@ -50,11 +53,12 @@ public class MogoApplication extends AbsMogoApplication {
MogoModulePaths.addModule(new MogoModule(CallChatConstant.PROVIDER, CallChatConstant.MODULE_NAME));
MogoModulePaths.addModule(new MogoModule(TanluConstants.TAG, TanluConstants.MODEL_NAME));
MogoModulePaths.addModule(new MogoModule(OnLineCarConstants.TAG, OnLineCarConstants.MODULE_NAME));
- MogoModulePaths.addModule(new MogoModule( FreshNewsConstants.TAG, FreshNewsConstants.MODULE_NAME));
-
+ MogoModulePaths.addModule(new MogoModule(FreshNewsConstants.TAG, FreshNewsConstants.MODULE_NAME));
+
MogoModulePaths.addModule(new MogoModule(V2XConst.PATH_V2X_UI, V2XConst.PATH_V2X_UI));
MogoModulePaths.addModule(new MogoModule(PushUIConstants.TAG, PushUIConstants.TAG));
- MogoModulePaths.addModule(new MogoModule( BackToLauncherConst.MODULE_PATH, BackToLauncherConst.MODULE_NAME));
+ MogoModulePaths.addModule(new MogoModule(BackToLauncherConst.MODULE_PATH, BackToLauncherConst.MODULE_NAME));
+ MogoModulePaths.addModule(new MogoModule(PATH_GUIDE_AGREEMENT_FRAGMENT, PATH_GUIDE_AGREEMENT_MODULE_NAME));
Log.i("timer", "cost " + (System.currentTimeMillis() - start) + "ms");
}
@@ -70,6 +74,6 @@ public class MogoApplication extends AbsMogoApplication {
super.attachBaseContext(base);
MultiDex.install(base);
DebugConfig.setNetMode(BuildConfig.NET_ENV);
- DebugConfig.setDebug( BuildConfig.DEBUG );
+ DebugConfig.setDebug(BuildConfig.DEBUG);
}
}
diff --git a/app/src/nwd/AndroidManifest.xml b/app/src/nwd/AndroidManifest.xml
index c39db3e4d6..0e42bd5132 100644
--- a/app/src/nwd/AndroidManifest.xml
+++ b/app/src/nwd/AndroidManifest.xml
@@ -1,8 +1,8 @@
+ package="com.mogo.launcher">
+
diff --git a/build.gradle b/build.gradle
index fe76aac9ed..5388f39431 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,6 +2,8 @@
apply from: "config.gradle"
apply from: "javadoc.gradle"
buildscript {
+ ext.kotlin_version = '1.3.41'
+
ext.kotlin_version = '1.3.61'
ext.kotlin_version = '1.3.61+'
repositories {
diff --git a/config.gradle b/config.gradle
index cb393debf5..0720e94562 100644
--- a/config.gradle
+++ b/config.gradle
@@ -109,6 +109,8 @@ ext {
modulefreshnews : "com.mogo.module:module-freshnews:${MOGO_MODULE_FRESH_NEWS_VERSION}",
//统一返回键
mogomoduleback : "com.mogo.module:module-back:${MOGO_MODULE_BACK_VERSION}",
+ mogomoduleauth : "com.mogo.module:module-authorize:${MOGO_MODULE_AUTHORIZE_VERSION}",
+ mogomoduleguide : "com.mogo.module:module-guide:${MOGO_MODULE_GUIDE_VERSION}",
// 长链
socketsdk : 'com.zhidao.socketsdk:socketsdk:2.1.1',
socketsdkconnsvrprotoco : 'com.zhidao.ptech:connsvr-protoco:0.1.23',
@@ -128,5 +130,8 @@ ext {
videoarm64 : "com.shuyu:gsyVideoPlayer-arm64:7.1.2",
videojava : "com.shuyu:gsyVideoPlayer-java:7.1.2",
eventbus : "org.greenrobot:eventbus:3.1.1",
+
+ coroutinescore : "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1",
+ coroutinesandroid : "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1"
]
}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index 06af0eb8b8..269e95d29e 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -45,14 +45,16 @@ MOGO_MODULE_SERVICE_VERSION=1.0.2-SNAPSHOT
MOGO_MODULE_EXTENSIONS_VERSION=1.0.2-SNAPSHOT
MOGO_MODULE_SEARCH_VERSION=1.0.2-SNAPSHOT
MOGO_MODULE_BACK_VERSION=1.0.2-SNAPSHOT
+MOGO_MODULE_AUTHORIZE_VERSION=1.0.0-SNAPSHOT
+MOGO_MODULE_GUIDE_VERSION=1.0.0-SNAPSHOT
## 工程外部模块
# 探路
MOGO_MODULE_TANLU_VERSION=1.0.2-SNAPSHOT
# 车聊聊
-CARCHATTING_VERSION=1.0.2.2-SNAPSHOT
+CARCHATTING_VERSION=1.0.2.3-SNAPSHOT
# 车聊聊接口
-CARCHATTINGPROVIDER_VERSION=1.0.2.2-SNAPSHOT
+CARCHATTINGPROVIDER_VERSION=1.0.2.3-SNAPSHOT
# 在线车辆F
MOGO_MODULE_ONLINECAR_VERSION=1.0.1-SNAPSHOT
# v2x
diff --git a/modules/mogo-module-authorize/.gitignore b/modules/mogo-module-authorize/.gitignore
new file mode 100644
index 0000000000..796b96d1c4
--- /dev/null
+++ b/modules/mogo-module-authorize/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/modules/mogo-module-authorize/build.gradle b/modules/mogo-module-authorize/build.gradle
new file mode 100644
index 0000000000..172f3cdfb7
--- /dev/null
+++ b/modules/mogo-module-authorize/build.gradle
@@ -0,0 +1,65 @@
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+apply plugin: 'com.alibaba.arouter'
+
+android {
+ compileSdkVersion rootProject.ext.android.compileSdkVersion
+
+ 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'
+
+ javaCompileOptions {
+ annotationProcessorOptions {
+ arguments = [AROUTER_MODULE_NAME: project.getName()]
+ }
+ }
+
+ }
+
+ 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.kotlinstdlibjdk7
+ implementation rootProject.ext.dependencies.androidxccorektx
+ implementation rootProject.ext.dependencies.coroutinescore
+ implementation rootProject.ext.dependencies.coroutinesandroid
+ implementation rootProject.ext.dependencies.androidxappcompat
+ implementation rootProject.ext.dependencies.androidxconstraintlayout
+ implementation rootProject.ext.dependencies.arouter
+ annotationProcessor rootProject.ext.dependencies.aroutercompiler
+
+ 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()
+repositories {
+ mavenCentral()
+}
diff --git a/modules/mogo-module-authorize/consumer-rules.pro b/modules/mogo-module-authorize/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/modules/mogo-module-authorize/gradle.properties b/modules/mogo-module-authorize/gradle.properties
new file mode 100644
index 0000000000..e06646d2db
--- /dev/null
+++ b/modules/mogo-module-authorize/gradle.properties
@@ -0,0 +1,3 @@
+GROUP=com.mogo.module
+POM_ARTIFACT_ID=module-authorize
+VERSION_CODE=1
diff --git a/modules/mogo-module-authorize/proguard-rules.pro b/modules/mogo-module-authorize/proguard-rules.pro
new file mode 100644
index 0000000000..f1b424510d
--- /dev/null
+++ b/modules/mogo-module-authorize/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
diff --git a/modules/mogo-module-authorize/src/androidTest/java/com/mogo/module/authorize/ExampleInstrumentedTest.kt b/modules/mogo-module-authorize/src/androidTest/java/com/mogo/module/authorize/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000000..d5b381bd09
--- /dev/null
+++ b/modules/mogo-module-authorize/src/androidTest/java/com/mogo/module/authorize/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.mogo.module.authorize
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("com.mogo.module.authorize.test", appContext.packageName)
+ }
+}
diff --git a/modules/mogo-module-authorize/src/main/AndroidManifest.xml b/modules/mogo-module-authorize/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..bdcca1cd30
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/IMogoAuthorizeController.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/IMogoAuthorizeController.kt
new file mode 100644
index 0000000000..4a08709d56
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/IMogoAuthorizeController.kt
@@ -0,0 +1,62 @@
+package com.mogo.module.authorize.authprovider.biz
+
+import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeContentListener
+import com.mogo.module.authorize.model.BaseResponse
+import com.mogo.module.authorize.model.IMogoAuthorizeModel
+import com.mogo.module.authorize.model.bean.UserAgreement
+import com.mogo.module.authorize.net.request
+import com.mogo.utils.logger.Logger
+
+open class IMogoAuthorizeController {
+
+ companion object {
+ const val TAG = "IMogoAuthorizeController"
+ }
+
+ private val authorizeModel: IMogoAuthorizeModel by lazy { IMogoAuthorizeModel() }
+
+ fun invokeAuthorizeContent(tag: String, agreementType: Int) {
+ if (agreementType == -1) {
+ getAuthorizeContentListener(tag, { listener ->
+ listener.requestContentFailed("invokeAuthorizeContent param tag is not right")
+ }, {
+ Logger.d(TAG, "invokeAuthorizeContent ---checkAgreementType can not find tag :$tag")
+ })
+ }
+ request> {
+ loader {
+ authorizeModel.invokeAuthorizeContent(agreementType)
+ }
+ onSuccess {
+ Logger.d(TAG, "invokeAuthorizeContent onSuccess data: ${it.result}")
+ getAuthorizeContentListener(tag, { listener ->
+ if (it.result != null) {
+ listener.requestContentSuccess(it.result)
+ } else {
+ listener.requestContentFailed("request authorize content success ,but result data is :${it.result}")
+ }
+ }, {
+ Logger.d(TAG, "invokeAuthorizeContent --- can not find listener by this tag :$tag")
+ })
+ }
+ onError {
+ getAuthorizeContentListener(tag, { listener ->
+ listener.requestContentFailed(it.message
+ ?: "request authorize content failed,please check network")
+ }, {
+ Logger.d(TAG, "invokeAuthorizeContent --- can not find listener by this tag :$tag")
+ })
+ }
+ }
+ }
+
+ private inline fun getAuthorizeContentListener(tag: String, blockSuccess: ((IMogoAuthorizeContentListener) -> Unit), blockNull: (() -> Unit)) {
+ val authorizeContentListener = MogoAuthorizeRegisterHandler.getAuthorizeContentListener(tag)
+ if (authorizeContentListener != null) {
+ blockSuccess(authorizeContentListener)
+ } else {
+ blockNull()
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/MogoAuthorizeManagerImpl.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/MogoAuthorizeManagerImpl.kt
new file mode 100644
index 0000000000..43c8edfe14
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/MogoAuthorizeManagerImpl.kt
@@ -0,0 +1,39 @@
+package com.mogo.module.authorize.authprovider.biz
+
+import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeContentListener
+import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeInvoke
+import com.mogo.module.authorize.authprovider.module.IMogoAcquireAuthorizeListener
+import com.mogo.module.authorize.model.proxy.AuthorizeProxy
+import com.mogo.module.authorize.util.SharedPreferenceUtil.hasAuth
+
+open abstract class MogoAuthorizeManagerImpl : IMogoAuthorizeInvoke {
+
+ private val baseController: IMogoAuthorizeController by lazy { IMogoAuthorizeController() }
+
+ override fun needAuthorize(): Boolean {
+ return hasAuth()
+ }
+
+ override fun invokeAuthorizeContent(tag: String) {
+ //todo 后面动态代理统一处理校验问题
+ val agreementType = AuthorizeProxy.getAuthorizeType(tag)
+ baseController.invokeAuthorizeContent(tag, agreementType)
+ }
+
+ override fun registerInvokeAuthorizeContentListener(tag: String, listener: IMogoAuthorizeContentListener) {
+ MogoAuthorizeRegisterHandler.registerInvokeAuthorizeContentListener(tag, listener)
+ }
+
+ override fun unregisterInvokeAuthorizeContentListener(tag: String) {
+ MogoAuthorizeRegisterHandler.unregisterInvokeAuthorizeContentListener(tag)
+ }
+
+ override fun registerAuthorizeListener(tag: String, listener: IMogoAcquireAuthorizeListener) {
+ MogoAuthorizeRegisterHandler.registerAuthorizeListener(tag, listener)
+ }
+
+ override fun unregisterAuthorizeListener(tag: String) {
+ MogoAuthorizeRegisterHandler.unregisterAuthorizeListener(tag)
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/MogoAuthorizeRegisterHandler.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/MogoAuthorizeRegisterHandler.kt
new file mode 100644
index 0000000000..67e4ab7060
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/MogoAuthorizeRegisterHandler.kt
@@ -0,0 +1,41 @@
+package com.mogo.module.authorize.authprovider.biz
+
+import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeContentListener
+import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeRegister
+import com.mogo.module.authorize.authprovider.module.IMogoAcquireAuthorizeListener
+import java.util.concurrent.ConcurrentHashMap
+
+object MogoAuthorizeRegisterHandler : IMogoAuthorizeRegister {
+
+ private val authMap: ConcurrentHashMap = ConcurrentHashMap()
+ private val authContentMap: ConcurrentHashMap = ConcurrentHashMap()
+
+ override fun registerAuthorizeListener(tag: String, listener: IMogoAcquireAuthorizeListener) {
+ authMap[tag] = listener
+ }
+
+ override fun unregisterAuthorizeListener(tag: String) {
+ authMap.remove(tag)
+ }
+
+ fun getAuthorizeListener(tag: String): IMogoAcquireAuthorizeListener? {
+ return authMap[tag]
+ }
+
+ fun getAllAuthorizeListener(): ConcurrentHashMap {
+ return authMap
+ }
+
+ override fun registerInvokeAuthorizeContentListener(tag: String, listener: IMogoAuthorizeContentListener) {
+ authContentMap[tag] = listener
+ }
+
+ override fun unregisterInvokeAuthorizeContentListener(tag: String) {
+ authContentMap.remove(tag)
+ }
+
+ fun getAuthorizeContentListener(tag: String): IMogoAuthorizeContentListener? {
+ return authContentMap[tag]
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/AuthorizeConstant.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/AuthorizeConstant.kt
new file mode 100644
index 0000000000..5c9e0be663
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/AuthorizeConstant.kt
@@ -0,0 +1,9 @@
+package com.mogo.module.authorize.authprovider.invoke
+
+class AuthorizeConstant {
+
+ companion object{
+ const val PROVIDER_MODULE = "/authorize/biz"
+ const val PROVIDER_LAUNCHER = "/authorize/showbiz"
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/AuthorizeInvokerConstant.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/AuthorizeInvokerConstant.kt
new file mode 100644
index 0000000000..4bde9cb12b
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/AuthorizeInvokerConstant.kt
@@ -0,0 +1,13 @@
+package com.mogo.module.authorize.authprovider.invoke
+
+class AuthorizeInvokerConstant {
+
+ companion object {
+ const val AUTHORIZE_TYPE_LAUNCHER_MAIN = "AUTHORIZE_TYPE_LAUNCHER_MAIN" //launcher
+ const val AUTHORIZE_TYPE_LAUNCHER_SHARE = "AUTHORIZE_TYPE_LAUNCHER_SHARE" //launcher
+ const val AUTHORIZE_TYPE_TAN_LU = "AUTHORIZE_TYPE_TAN_LU" //探路
+ const val AUTHORIZE_TYPE_CALL_CHAT = "AUTHORIZE_TYPE_CALL_CHAT" //车聊聊
+ const val AUTHORIZE_TYPE_NOVELTY = "AUTHORIZE_TYPE_NOVELTY" //新鲜事
+ const val AUTHORIZE_TYPE_AUXILIARY_DRIVING = "AUTHORIZE_TYPE_AUXILIARY_DRIVING" //辅助驾驶
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/IMogoAuthorizeContentListener.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/IMogoAuthorizeContentListener.kt
new file mode 100644
index 0000000000..75b0200ee3
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/IMogoAuthorizeContentListener.kt
@@ -0,0 +1,13 @@
+package com.mogo.module.authorize.authprovider.invoke
+
+import com.mogo.module.authorize.model.bean.UserAgreement
+
+/**
+ * 获取授权信息回调
+ */
+interface IMogoAuthorizeContentListener {
+
+ fun requestContentSuccess(userAgreement: UserAgreement)
+
+ fun requestContentFailed(errorMsg: String)
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/IMogoAuthorizeForbiddenVoice.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/IMogoAuthorizeForbiddenVoice.kt
new file mode 100644
index 0000000000..bc646e2024
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/IMogoAuthorizeForbiddenVoice.kt
@@ -0,0 +1,9 @@
+package com.mogo.module.authorize.authprovider.invoke
+
+interface IMogoAuthorizeForbiddenVoice {
+
+ /**
+ * 当授权页面展示时,语音回调不生效(唤醒、免唤醒)
+ */
+ fun forbiddenVoiceWhenAuthorize(cmd: String)
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/IMogoAuthorizeInvoke.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/IMogoAuthorizeInvoke.kt
new file mode 100644
index 0000000000..cf02f66f73
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/IMogoAuthorizeInvoke.kt
@@ -0,0 +1,18 @@
+package com.mogo.module.authorize.authprovider.invoke
+
+/**
+ * 公共Business业务
+ */
+interface IMogoAuthorizeInvoke : IMogoAuthorizeRegister {
+
+ /**
+ * 是否需要授权
+ */
+ fun needAuthorize(): Boolean
+
+ /**
+ * 获取授权内容
+ * tag:模块ID
+ */
+ fun invokeAuthorizeContent(tag: String)
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/IMogoAuthorizeRegister.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/IMogoAuthorizeRegister.kt
new file mode 100644
index 0000000000..80dada5078
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/invoke/IMogoAuthorizeRegister.kt
@@ -0,0 +1,41 @@
+package com.mogo.module.authorize.authprovider.invoke
+
+import com.mogo.module.authorize.authprovider.module.IMogoAcquireAuthorizeListener
+
+interface IMogoAuthorizeRegister {
+
+ /**
+ * 注冊授权回调
+ * tag:module tag
+ * @see IMogoAcquireAuthorizeListener
+ */
+ fun registerAuthorizeListener(tag: String, listener: IMogoAcquireAuthorizeListener) {
+
+ }
+
+ /**
+ * 反注册授权回调
+ * tag:module tag
+ */
+ fun unregisterAuthorizeListener(tag: String) {
+
+ }
+
+ /**
+ * 注册授权信息内容回调
+ * tag:module tag
+ * @see IMogoAuthorizeContentListener
+ */
+ fun registerInvokeAuthorizeContentListener(tag: String, listener: IMogoAuthorizeContentListener) {
+
+ }
+
+ /**
+ * 反注册授权信息内容回调
+ * tag:module tag
+ */
+ fun unregisterInvokeAuthorizeContentListener(tag: String) {
+
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/IAuthorizeMainInvoke.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/IAuthorizeMainInvoke.kt
new file mode 100644
index 0000000000..4fa6005c28
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/IAuthorizeMainInvoke.kt
@@ -0,0 +1,19 @@
+package com.mogo.module.authorize.authprovider.launcher
+
+import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeInvoke
+
+//与Biz业务相同接口实现
+interface IAuthorizeMainInvoke : IMogoAuthorizeInvoke {
+
+ /**
+ * 同意授权
+ * tag:透传模块ID
+ */
+ fun agreeAuthorize(tag: String, agrId: Long)
+
+ /**
+ * 不同意授权
+ * tag:透传模块ID
+ */
+ fun disAgreeAuthorize(tag: String, agrId: Long)
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/IMogoAuthorizeMainManager.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/IMogoAuthorizeMainManager.kt
new file mode 100644
index 0000000000..366b5b40b1
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/IMogoAuthorizeMainManager.kt
@@ -0,0 +1,26 @@
+package com.mogo.module.authorize.authprovider.launcher
+
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant
+import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeContentListener
+import com.mogo.module.authorize.authprovider.launcher.MogoMainAuthorize.Companion.mogoAuthShow
+
+@Route(path = AuthorizeConstant.PROVIDER_LAUNCHER)
+class IMogoAuthorizeMainManager : IMogoAuthorizeMainProvider {
+
+ override fun needAuthorize(): Boolean {
+ return mogoAuthShow.needAuthorize()
+ }
+
+ override fun invokeAuthorizeContent(tag: String) {
+ mogoAuthShow.invokeAuthorizeContent(tag)
+ }
+
+ override fun agreeAuthorize(tag: String, agrId: Long) {
+ mogoAuthShow.agreeAuthorize(tag, agrId)
+ }
+
+ override fun disAgreeAuthorize(tag: String, agrId: Long) {
+ mogoAuthShow.disAgreeAuthorize(tag, agrId)
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/IMogoAuthorizeMainProvider.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/IMogoAuthorizeMainProvider.kt
new file mode 100644
index 0000000000..8a47fe9fc3
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/IMogoAuthorizeMainProvider.kt
@@ -0,0 +1,14 @@
+package com.mogo.module.authorize.authprovider.launcher
+
+import android.content.Context
+import com.alibaba.android.arouter.facade.template.IProvider
+import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeInvoke
+
+//仅提供给调用业务端(主launcher)使用
+interface IMogoAuthorizeMainProvider : IProvider, IAuthorizeMainInvoke {
+
+ override fun init(context: Context?) {
+
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/IMogoAuthorizeShow.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/IMogoAuthorizeShow.kt
new file mode 100644
index 0000000000..f6cbde0907
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/IMogoAuthorizeShow.kt
@@ -0,0 +1,8 @@
+package com.mogo.module.authorize.authprovider.launcher
+
+import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeForbiddenVoice
+
+interface IMogoAuthorizeShow : IMogoAuthorizeForbiddenVoice {
+
+ fun showAuthorizeView()
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/MogoAuthorizeMainController.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/MogoAuthorizeMainController.kt
new file mode 100644
index 0000000000..fba421396c
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/MogoAuthorizeMainController.kt
@@ -0,0 +1,61 @@
+package com.mogo.module.authorize.authprovider.launcher
+
+import com.mogo.module.authorize.authprovider.biz.IMogoAuthorizeController
+import com.mogo.module.authorize.authprovider.biz.MogoAuthorizeRegisterHandler
+import com.mogo.module.authorize.model.BaseResponse
+import com.mogo.module.authorize.model.bean.AGREEMENT_EFFECT
+import com.mogo.module.authorize.model.bean.AGREEMENT_NOT_EFFECT
+import com.mogo.module.authorize.net.request
+import com.mogo.utils.logger.Logger
+
+object MogoAuthorizeMainController : IMogoAuthorizeController() {
+
+ private val authorizeShowModel: MogoAuthorizeMainModel by lazy { MogoAuthorizeMainModel() }
+
+ @Synchronized
+ fun agreeAuthorize(tag: String, agrId: Long) {
+ val acquireAuthListener = MogoAuthorizeRegisterHandler.getAuthorizeListener(tag)
+ updateAuthorize(agrId, AGREEMENT_EFFECT, {
+ if (acquireAuthListener != null) {
+ acquireAuthListener.authorizeSuccess()
+ } else {
+ Logger.d(TAG, "agreeAuthorize --- can not find listener by this tag :$tag ")
+ }
+ }, {
+ authorizeFailed(tag, it ?: "agreeAuthorize failed,please check network")
+ })
+ }
+
+ @Synchronized
+ fun disAgreeAuthorize(tag: String, agrId: Long) {
+ updateAuthorize(agrId, AGREEMENT_NOT_EFFECT, {
+ authorizeFailed(tag, "UserDisAgree authorize")
+ }, {
+ authorizeFailed(tag, it ?: "disAgreeAuthorize failed,please check network")
+ })
+ }
+
+ private fun updateAuthorize(agrId: Long, agreementStatus: Int, onSuccess: (() -> Unit), onError: ((String?) -> Unit)) {
+ request> {
+ loader {
+ authorizeShowModel.updateAuthorize(agrId, agreementStatus)
+ }
+ onSuccess {
+ onSuccess.invoke()
+ }
+ onError {
+ onError.invoke(it.message)
+ }
+ }
+ }
+
+ private fun authorizeFailed(tag: String, errorMsg: String) {
+ val acquireAuthorizeListener = MogoAuthorizeRegisterHandler.getAuthorizeListener(tag)
+ if (acquireAuthorizeListener != null) {
+ acquireAuthorizeListener.authorizeFailed(errorMsg)
+ } else {
+ Logger.d(TAG, "disAgreeAuthorize --- can not find listener by this tag :$tag ")
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/MogoAuthorizeMainModel.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/MogoAuthorizeMainModel.kt
new file mode 100644
index 0000000000..b843f1696c
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/MogoAuthorizeMainModel.kt
@@ -0,0 +1,17 @@
+package com.mogo.module.authorize.authprovider.launcher
+
+import com.google.gson.Gson
+import com.mogo.commons.network.Utils.getSn
+import com.mogo.module.authorize.model.BaseResponse
+import com.mogo.module.authorize.model.IMogoAuthorizeModel
+import com.mogo.module.authorize.model.bean.UpdateAuthorize
+import com.mogo.module.authorize.util.ServiceUtil.getNetWorkApi
+
+class MogoAuthorizeMainModel : IMogoAuthorizeModel() {
+
+ suspend fun updateAuthorize(agrId: Long, agreementStatus: Int): BaseResponse {
+ val updateAuthorize = Gson().toJson(UpdateAuthorize(agrId, agreementStatus))
+ val map = mapOf("sn" to getSn(), "data" to updateAuthorize)
+ return apiCall { getNetWorkApi().updateAuthorize(map) }
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/MogoMainAuthorize.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/MogoMainAuthorize.kt
new file mode 100644
index 0000000000..e8ba3050d3
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/launcher/MogoMainAuthorize.kt
@@ -0,0 +1,57 @@
+package com.mogo.module.authorize.authprovider.launcher
+
+import android.os.Looper
+import com.alibaba.android.arouter.launcher.ARouter
+import com.mogo.module.authorize.authprovider.biz.MogoAuthorizeManagerImpl
+import com.mogo.module.authorize.authprovider.biz.MogoAuthorizeRegisterHandler
+import com.mogo.module.authorize.fragment.AuthorizeFragment
+import com.mogo.module.authorize.util.SharedPreferenceUtil.hasAuth
+import com.mogo.service.IMogoServiceApis
+import com.mogo.service.MogoServicePaths
+import com.mogo.service.fragmentmanager.FragmentDescriptor
+
+class MogoMainAuthorize private constructor() : MogoAuthorizeManagerImpl(), IMogoAuthorizeMainProvider {
+
+ companion object {
+
+ const val TAG = "MogoMainAuthorize"
+
+ val mogoAuthShow by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ MogoMainAuthorize()
+ }
+ }
+
+ private var serviceApi: IMogoServiceApis? = null
+
+ override fun agreeAuthorize(tag: String, agrId: Long) {
+ MogoAuthorizeMainController.agreeAuthorize(tag, agrId)
+ }
+
+ override fun disAgreeAuthorize(tag: String, agrId: Long) {
+ MogoAuthorizeMainController.disAgreeAuthorize(tag, agrId)
+ }
+
+ fun showAuthorizeView(tag: String, forbiddenVoice: (() -> Unit), onError: ((String) -> Unit)) {
+ val listener = MogoAuthorizeRegisterHandler.getAuthorizeListener(tag)
+ if (listener == null) {
+ onError.invoke("launcher authorizeShowListener is null,must register in MainActivity")
+ }
+ forbiddenVoice()
+
+ if (Thread.currentThread() != Looper.getMainLooper().thread) {
+ onError.invoke("invoke should be in main thread")
+ }
+ val mogoService = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation()
+ if (mogoService is IMogoServiceApis) {
+ serviceApi = mogoService
+ }
+ if (hasAuth()) {
+ onError.invoke("already authorize,do not repeat operation")
+ }
+ serviceApi?.let {
+ val builderWrapper = FragmentDescriptor.Builder().fragment(AuthorizeFragment()).build()
+ it.fragmentManagerApi.push(builderWrapper)
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/IAuthorizeModuleInvoke.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/IAuthorizeModuleInvoke.kt
new file mode 100644
index 0000000000..6bfb811922
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/IAuthorizeModuleInvoke.kt
@@ -0,0 +1,7 @@
+package com.mogo.module.authorize.authprovider.module
+
+import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeInvoke
+
+//与Biz业务相同接口实现
+interface IAuthorizeModuleInvoke : IMogoAuthorizeInvoke {
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/IMogoAcquireAuthorizeListener.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/IMogoAcquireAuthorizeListener.kt
new file mode 100644
index 0000000000..99948178ad
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/IMogoAcquireAuthorizeListener.kt
@@ -0,0 +1,11 @@
+package com.mogo.module.authorize.authprovider.module
+
+import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeForbiddenVoice
+
+interface IMogoAcquireAuthorizeListener : IMogoAuthorizeForbiddenVoice {
+
+ fun authorizeSuccess()
+
+ fun authorizeFailed(errorMsg: String)
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/IMogoAuthorizeModuleManager.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/IMogoAuthorizeModuleManager.kt
new file mode 100644
index 0000000000..81c6682d0e
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/IMogoAuthorizeModuleManager.kt
@@ -0,0 +1,23 @@
+package com.mogo.module.authorize.authprovider.module
+
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant
+import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeContentListener
+import com.mogo.module.authorize.authprovider.module.MogoModuleAuthorize.Companion.mogoAuth
+
+@Route(path = AuthorizeConstant.PROVIDER_MODULE)
+class IMogoAuthorizeModuleManager : IMogoAuthorizeModuleProvider {
+
+ override fun needAuthorize(): Boolean {
+ return mogoAuth.needAuthorize()
+ }
+
+ override fun invokeAuthorization(tag: String) {
+ mogoAuth.invokeAuthorization(tag)
+ }
+
+ override fun invokeAuthorizeContent(tag: String) {
+ mogoAuth.invokeAuthorizeContent(tag)
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/IMogoAuthorizeModuleProvider.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/IMogoAuthorizeModuleProvider.kt
new file mode 100644
index 0000000000..9dc0e81bb9
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/IMogoAuthorizeModuleProvider.kt
@@ -0,0 +1,19 @@
+package com.mogo.module.authorize.authprovider.module
+
+import android.content.Context
+import com.alibaba.android.arouter.facade.template.IProvider
+import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeInvoke
+
+////仅提供给调用业务端(module)使用
+interface IMogoAuthorizeModuleProvider : IProvider, IMogoAuthorizeInvoke {
+
+ override fun init(context: Context) {
+
+ }
+
+ /**
+ * 调用授权页面
+ */
+ fun invokeAuthorization(tag: String)
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/MogoAuthorizeModuleController.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/MogoAuthorizeModuleController.kt
new file mode 100644
index 0000000000..2f38af2f7b
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/MogoAuthorizeModuleController.kt
@@ -0,0 +1,7 @@
+package com.mogo.module.authorize.authprovider.module
+
+import com.mogo.module.authorize.authprovider.biz.IMogoAuthorizeController
+
+object MogoAuthorizeModuleController : IMogoAuthorizeController() {
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/MogoModuleAuthorize.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/MogoModuleAuthorize.kt
new file mode 100644
index 0000000000..8dc0ed4aae
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/module/MogoModuleAuthorize.kt
@@ -0,0 +1,34 @@
+package com.mogo.module.authorize.authprovider.module
+
+import com.mogo.module.authorize.authprovider.biz.MogoAuthorizeManagerImpl
+import com.mogo.module.authorize.authprovider.biz.MogoAuthorizeRegisterHandler
+import com.mogo.module.authorize.authprovider.launcher.MogoMainAuthorize.Companion.mogoAuthShow
+
+class MogoModuleAuthorize private constructor() : MogoAuthorizeManagerImpl(), IMogoAuthorizeModuleProvider {
+
+ companion object {
+ val mogoAuth by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ MogoModuleAuthorize()
+ }
+ }
+
+ override fun invokeAuthorization(tag: String) {
+ mogoAuthShow.showAuthorizeView(tag, {
+ //todo SP存储状态
+ }, { errorMsg ->
+ val listener = MogoAuthorizeRegisterHandler.getAuthorizeListener(tag)
+ listener?.authorizeFailed(errorMsg)
+ })
+ }
+
+ fun forbiddenVoiceWhenAuthorize(cmd: String) {
+ val tmpMap = MogoAuthorizeRegisterHandler.getAllAuthorizeListener()
+ if (tmpMap == null || tmpMap.size == 0) {
+ return
+ }
+ tmpMap.forEach {
+ val acquireListener = it.value
+ acquireListener?.forbiddenVoiceWhenAuthorize(cmd)
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/constant/HttpConstant.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/constant/HttpConstant.kt
new file mode 100644
index 0000000000..2fc27740b0
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/constant/HttpConstant.kt
@@ -0,0 +1,21 @@
+package com.mogo.module.authorize.constant
+
+import com.mogo.commons.debug.DebugConfig
+
+class HttpConstant {
+
+ companion object {
+ const val HOST_DEV = "http://dzt-test.zhidaohulian.com"
+ const val HOST_TEST = "http://dzt-test.zhidaohulian.com"
+ const val HOST_PRODUCT = "https://dzt.zhidaohulian.com"
+
+ fun getNetHost(): String {
+ return when (DebugConfig.getNetMode()) {
+ DebugConfig.NET_MODE_DEV -> HOST_DEV
+ DebugConfig.NET_MODE_QA -> HOST_TEST
+ else -> HOST_PRODUCT
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/exception/ApiException.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/exception/ApiException.kt
new file mode 100644
index 0000000000..550657005e
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/exception/ApiException.kt
@@ -0,0 +1,16 @@
+package com.mogo.module.authorize.exception
+
+
+class ApiException : CommonException {
+
+ companion object {
+ val NULL_REQUEST_DATA_API_EXCEPTION = ApiException(2, "request data is null")
+ val ENTER_ROOM_API_EXCEPTION = ApiException(3, "roomId is null or already enter room")
+ }
+
+ constructor(code: Int, msg: String) : super(code, msg)
+
+ fun getErrorMsg():String{
+ return msg
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/exception/CommonException.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/exception/CommonException.kt
new file mode 100644
index 0000000000..53c430493c
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/exception/CommonException.kt
@@ -0,0 +1,17 @@
+package com.mogo.module.authorize.exception
+
+open class CommonException : Exception {
+
+ companion object {
+ val NETWORK_EXCEPTION = CommonException(1, "network is error")
+ }
+
+ protected var code: Int = 0
+ protected var msg: String = ""
+
+ constructor(code: Int, msg: String) : super(msg) {
+ this.code = code
+ this.msg = msg
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/fragment/AuthorizeContract.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/fragment/AuthorizeContract.kt
new file mode 100644
index 0000000000..f63ac5886e
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/fragment/AuthorizeContract.kt
@@ -0,0 +1,14 @@
+package com.mogo.module.authorize.fragment
+
+import com.mogo.commons.mvp.IView
+
+class AuthorizeContract {
+
+ interface View : IView {
+
+ }
+
+ interface Biz {
+
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/fragment/AuthorizeFragment.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/fragment/AuthorizeFragment.kt
new file mode 100644
index 0000000000..5bc6fcde59
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/fragment/AuthorizeFragment.kt
@@ -0,0 +1,28 @@
+package com.mogo.module.authorize.fragment
+
+import android.view.View
+import com.mogo.commons.mvp.MvpFragment
+import com.mogo.module.authorize.R
+
+class AuthorizeFragment : MvpFragment(), AuthorizeContract.View,View.OnClickListener {
+
+ companion object {
+ const val TAG = "AuthorizeFragment"
+ }
+
+ override fun getLayoutId(): Int {
+ return R.layout.module_authorize_fragment
+ }
+
+ override fun initViews() {
+
+ }
+
+ override fun createPresenter(): AuthorizePresenter {
+ return AuthorizePresenter(this)
+ }
+
+ override fun onClick(v: View) {
+
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/fragment/AuthorizePresenter.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/fragment/AuthorizePresenter.kt
new file mode 100644
index 0000000000..98a3d3f79f
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/fragment/AuthorizePresenter.kt
@@ -0,0 +1,15 @@
+package com.mogo.module.authorize.fragment
+
+import androidx.lifecycle.LifecycleOwner
+import com.mogo.commons.mvp.Presenter
+
+class AuthorizePresenter : Presenter, AuthorizeContract.Biz {
+
+ constructor(view: AuthorizeContract.View?) : super(view)
+
+ override fun onCreate(owner: LifecycleOwner) {
+ super.onCreate(owner)
+ }
+
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/BaseRepository.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/BaseRepository.kt
new file mode 100644
index 0000000000..004a7bbf05
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/BaseRepository.kt
@@ -0,0 +1,8 @@
+package com.mogo.module.authorize.model
+
+open class BaseRepository {
+
+ suspend fun apiCall(call: suspend () -> BaseResponse): BaseResponse {
+ return call.invoke()
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/BaseResponse.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/BaseResponse.kt
new file mode 100644
index 0000000000..d5790a7d87
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/BaseResponse.kt
@@ -0,0 +1,6 @@
+package com.mogo.module.authorize.model
+
+
+class BaseResponse(val code: Int, val msg: String, val result: T) {
+
+}
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/IMogoAuthorizeModel.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/IMogoAuthorizeModel.kt
new file mode 100644
index 0000000000..915f9123fd
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/IMogoAuthorizeModel.kt
@@ -0,0 +1,20 @@
+package com.mogo.module.authorize.model
+
+import com.google.gson.Gson
+import com.mogo.commons.network.Utils.getSn
+import com.mogo.module.authorize.model.bean.RequestUserAgreement
+import com.mogo.module.authorize.model.bean.UserAgreement
+import com.mogo.module.authorize.util.ServiceUtil.getNetWorkApi
+
+open class IMogoAuthorizeModel : BaseRepository() {
+
+ companion object {
+ const val TAG = "IMogoAuthorizeModel"
+ }
+
+ suspend fun invokeAuthorizeContent(agreementType: Int): BaseResponse {
+ val requestUserAgreement = Gson().toJson(RequestUserAgreement(agreementType))
+ val map = mapOf("sn" to getSn(), "data" to requestUserAgreement)
+ return apiCall { getNetWorkApi().getAuthorizeContent(map) }
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/bean/UpdateAuthorize.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/bean/UpdateAuthorize.kt
new file mode 100644
index 0000000000..305be207a8
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/bean/UpdateAuthorize.kt
@@ -0,0 +1,16 @@
+package com.mogo.module.authorize.model.bean
+
+class UpdateAuthorize {
+ var agrId: Long
+ var status: Int
+
+ constructor(agrId: Long, status: Int) {
+ this.agrId = agrId
+ this.status = status
+ }
+
+ override fun toString(): String {
+ return "UpdateAuthorize(agrId=$agrId, status=$status)"
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/bean/UserAgreement.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/bean/UserAgreement.kt
new file mode 100644
index 0000000000..38b70c86e3
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/bean/UserAgreement.kt
@@ -0,0 +1,21 @@
+package com.mogo.module.authorize.model.bean
+
+const val AGREEMENT_EFFECT = 1 //用户协议生效
+const val AGREEMENT_NOT_EFFECT = 2 //用户协议不生效
+
+class RequestUserAgreement(val agreementType:Int)
+
+data class UserAgreement(var agreementEntity: TUserAgreementEntity, var agreementContent: List)
+
+data class TUserAgreementEntity(
+ val id: Int, //协议ID
+ val title: String, //标题
+ val subhead: String, //副标题
+ val agreementButtonFirst: String, //底部标题1
+ val agreementButtonSecond: String, //底部标题2
+ val agreementType: Int, //协议类型
+ val agreementVersion: String, //协议版本
+ val agreementUserType: String, //协议适用用户
+ val agreementStatus: Int, //协议状态 1:生效 2:未生效
+ val createTime: String, //协议创建时间
+ val updateTime: String) //协议更新时间
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/proxy/AuthorizeProxy.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/proxy/AuthorizeProxy.kt
new file mode 100644
index 0000000000..10b77b858b
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/proxy/AuthorizeProxy.kt
@@ -0,0 +1,57 @@
+package com.mogo.module.authorize.model.proxy
+
+import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant.Companion.AUTHORIZE_TYPE_AUXILIARY_DRIVING
+import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant.Companion.AUTHORIZE_TYPE_CALL_CHAT
+import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant.Companion.AUTHORIZE_TYPE_LAUNCHER_MAIN
+import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant.Companion.AUTHORIZE_TYPE_LAUNCHER_SHARE
+import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant.Companion.AUTHORIZE_TYPE_NOVELTY
+import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant.Companion.AUTHORIZE_TYPE_TAN_LU
+import java.util.*
+
+class AuthorizeProxy {
+
+ companion object {
+ var allAuthorizeTypes = HashMap()
+
+ fun getAuthorizeType(authorizeName: String): Int {
+ if (authorizeName.isNullOrBlank()) {
+ return -1
+ }
+ return allAuthorizeTypes[authorizeName]!!.getAcquireId()
+ }
+ }
+
+ init {
+ for ((index, type) in AuthorizeEnum.values().withIndex()) {
+ type.getOperationName()?.let {
+ allAuthorizeTypes[it] = type
+ }
+ }
+ }
+
+ enum class AuthorizeEnum : IAuthorizeOperation {
+ LAUNCHER_MAIN(0, AUTHORIZE_TYPE_LAUNCHER_MAIN),
+ LAUNCHER_SHARE(0, AUTHORIZE_TYPE_LAUNCHER_SHARE),
+ CALL_CHAT(1, AUTHORIZE_TYPE_TAN_LU),
+ TANLU(2, AUTHORIZE_TYPE_CALL_CHAT),
+ NOVELTY(3, AUTHORIZE_TYPE_NOVELTY),
+ AUXILIARY_DRIVING(4, AUTHORIZE_TYPE_AUXILIARY_DRIVING);
+
+ private var authorizeType = 0
+ private var authorizeName: String? = null
+
+ constructor(authorizeType: Int, authorizeName: String?) {
+ this.authorizeType = authorizeType
+ this.authorizeName = authorizeName
+ }
+
+ override fun getOperationName(): String? {
+ return authorizeName
+ }
+
+ override fun getAcquireId(): Int {
+ return authorizeType
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/proxy/IAuthorizeOperation.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/proxy/IAuthorizeOperation.kt
new file mode 100644
index 0000000000..952246213b
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/model/proxy/IAuthorizeOperation.kt
@@ -0,0 +1,8 @@
+package com.mogo.module.authorize.model.proxy
+
+interface IAuthorizeOperation {
+
+ fun getOperationName(): String?
+
+ fun getAcquireId(): Int
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/net/AuthorizeApi.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/net/AuthorizeApi.kt
new file mode 100644
index 0000000000..4e8a443d0f
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/net/AuthorizeApi.kt
@@ -0,0 +1,21 @@
+package com.mogo.module.authorize.net
+
+import com.mogo.module.authorize.model.BaseResponse
+import com.mogo.module.authorize.model.bean.UserAgreement
+import retrofit2.http.FieldMap
+import retrofit2.http.FormUrlEncoded
+import retrofit2.http.POST
+
+interface AuthorizeApi {
+
+ //获取授权内容
+ @FormUrlEncoded
+ @POST("yycp-channelManager/agreement/findUserAgreement")
+ suspend fun getAuthorizeContent(@FieldMap authorizeContent: Map): BaseResponse
+
+ //更新授权状态
+ @FormUrlEncoded
+ @POST("yycp-channelManager/agreement/updateStatus")
+ suspend fun updateAuthorize(@FieldMap updateStatus: Map): BaseResponse
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/net/CoroutineDSL.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/net/CoroutineDSL.kt
new file mode 100644
index 0000000000..8d66537415
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/net/CoroutineDSL.kt
@@ -0,0 +1,79 @@
+package com.mogo.module.authorize.net
+
+import com.mogo.module.authorize.exception.ApiException
+import com.mogo.module.authorize.exception.ApiException.Companion.NULL_REQUEST_DATA_API_EXCEPTION
+import com.mogo.module.authorize.exception.CommonException.Companion.NETWORK_EXCEPTION
+import com.mogo.module.authorize.model.BaseResponse
+import kotlinx.coroutines.*
+import java.net.SocketTimeoutException
+import java.net.UnknownHostException
+import java.util.concurrent.TimeoutException
+
+class Request {
+ private lateinit var loader: suspend () -> T
+
+ private var start: (() -> Unit)? = null
+
+ private var onSuccess: ((T) -> Unit)? = null
+
+ private var onError: ((java.lang.Exception) -> Unit)? = null
+
+ private var onComplete: (() -> Unit)? = null
+
+ infix fun loader(loader: suspend () -> T) {
+ this.loader = loader
+ }
+
+ infix fun start(start: (() -> Unit)?) {
+ this.start = start
+ }
+
+ infix fun onSuccess(onSuccess: ((T) -> Unit)?) {
+ this.onSuccess = onSuccess
+ }
+
+ infix fun onError(onError: ((java.lang.Exception) -> Unit)?) {
+ this.onError = onError
+ }
+
+ infix fun onComplete(onComplete: (() -> Unit)?) {
+ this.onComplete = onComplete
+ }
+
+ fun request() {
+
+ GlobalScope.launch(context = Dispatchers.Main) {
+
+ start?.invoke()
+ try {
+ val deferred = GlobalScope.async(Dispatchers.IO, start = CoroutineStart.LAZY) {
+ loader()
+ }
+ val result = deferred.await()
+ if (result != null && result is BaseResponse<*>) {
+ if (result.code == 0) {
+ onSuccess?.invoke(result)
+ } else {
+ throw ApiException(result.code, result.msg)
+ }
+ } else {
+ throw NULL_REQUEST_DATA_API_EXCEPTION
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ when (e) {
+ is UnknownHostException -> onError?.invoke(NETWORK_EXCEPTION)
+ is TimeoutException -> onError?.invoke(NETWORK_EXCEPTION)
+ is SocketTimeoutException -> onError?.invoke(NETWORK_EXCEPTION)
+ else -> onError?.invoke(java.lang.Exception(e.message))
+ }
+ } finally {
+ onComplete?.invoke()
+ }
+ }
+ }
+}
+
+inline fun request(buildRequest: Request.() -> Unit) {
+ Request().apply(buildRequest).request()
+}
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/util/ServiceUtil.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/util/ServiceUtil.kt
new file mode 100644
index 0000000000..ee86d86294
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/util/ServiceUtil.kt
@@ -0,0 +1,30 @@
+package com.mogo.module.authorize.util
+
+import com.alibaba.android.arouter.launcher.ARouter
+import com.mogo.module.authorize.constant.HttpConstant.Companion.getNetHost
+import com.mogo.module.authorize.net.AuthorizeApi
+import com.mogo.service.IMogoServiceApis
+import com.mogo.service.MogoServicePaths
+
+object ServiceUtil {
+
+ private lateinit var serviceApi: IMogoServiceApis
+
+ init {
+ initMogoService()
+ }
+
+ private fun initMogoService() {
+ if (serviceApi == null) {
+ val mogoService = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation()
+ if (mogoService is IMogoServiceApis) {
+ this.serviceApi = mogoService
+ }
+ }
+ }
+
+ fun getNetWorkApi(): AuthorizeApi {
+ return serviceApi.networkApi.create(AuthorizeApi::class.java, getNetHost())
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/util/SharedPreferenceUtil.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/util/SharedPreferenceUtil.kt
new file mode 100644
index 0000000000..1b42ca059d
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/util/SharedPreferenceUtil.kt
@@ -0,0 +1,14 @@
+package com.mogo.module.authorize.util
+
+import com.mogo.commons.AbsMogoApplication
+import com.mogo.utils.storage.SharedPrefsMgr
+
+object SharedPreferenceUtil {
+
+ const val HAS_AUTH = "HAS_AUTH"
+
+ fun hasAuth(): Boolean {
+ return SharedPrefsMgr.getInstance(AbsMogoApplication.getApp()).getBoolean(HAS_AUTH, false)
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/res/layout/module_authorize_fragment.xml b/modules/mogo-module-authorize/src/main/res/layout/module_authorize_fragment.xml
new file mode 100644
index 0000000000..e313c14595
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/res/layout/module_authorize_fragment.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-authorize/src/main/res/values/strings.xml b/modules/mogo-module-authorize/src/main/res/values/strings.xml
new file mode 100644
index 0000000000..f8cf4d2fa8
--- /dev/null
+++ b/modules/mogo-module-authorize/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ mogo-module-authorize
+
diff --git a/modules/mogo-module-authorize/src/test/java/com/mogo/module/authorize/ExampleUnitTest.kt b/modules/mogo-module-authorize/src/test/java/com/mogo/module/authorize/ExampleUnitTest.kt
new file mode 100644
index 0000000000..f2b7332da6
--- /dev/null
+++ b/modules/mogo-module-authorize/src/test/java/com/mogo/module/authorize/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.mogo.module.authorize
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
diff --git a/modules/mogo-module-guide/.gitignore b/modules/mogo-module-guide/.gitignore
new file mode 100644
index 0000000000..796b96d1c4
--- /dev/null
+++ b/modules/mogo-module-guide/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/modules/mogo-module-guide/build.gradle b/modules/mogo-module-guide/build.gradle
new file mode 100644
index 0000000000..cf008cd79a
--- /dev/null
+++ b/modules/mogo-module-guide/build.gradle
@@ -0,0 +1,67 @@
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+apply plugin: 'com.alibaba.arouter'
+
+android {
+ compileSdkVersion rootProject.ext.android.compileSdkVersion
+
+ 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'
+
+ javaCompileOptions {
+ annotationProcessorOptions {
+ arguments = [AROUTER_MODULE_NAME: project.getName()]
+ }
+ }
+ }
+
+ 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.kotlinstdlibjdk7
+ implementation rootProject.ext.dependencies.androidxccorektx
+ implementation rootProject.ext.dependencies.coroutinescore
+ implementation rootProject.ext.dependencies.coroutinesandroid
+ implementation rootProject.ext.dependencies.androidxappcompat
+ implementation rootProject.ext.dependencies.androidxconstraintlayout
+ implementation rootProject.ext.dependencies.androidxviewpager2
+ implementation rootProject.ext.dependencies.arouter
+ annotationProcessor rootProject.ext.dependencies.aroutercompiler
+
+ if (Boolean.valueOf(RELEASE)) {
+ implementation rootProject.ext.dependencies.mogoutils
+ implementation rootProject.ext.dependencies.mogocommons
+ implementation rootProject.ext.dependencies.moduleservice
+ implementation rootProject.ext.dependencies.mogoserviceapi
+ } else {
+ implementation project(":foudations:mogo-utils")
+ implementation project(":foudations:mogo-commons")
+ implementation project(":modules:mogo-module-service")
+ implementation project(':services:mogo-service-api')
+ }
+}
+
+apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
+repositories {
+ mavenCentral()
+}
\ No newline at end of file
diff --git a/modules/mogo-module-guide/consumer-rules.pro b/modules/mogo-module-guide/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/modules/mogo-module-guide/gradle.properties b/modules/mogo-module-guide/gradle.properties
new file mode 100644
index 0000000000..d5a467b651
--- /dev/null
+++ b/modules/mogo-module-guide/gradle.properties
@@ -0,0 +1,3 @@
+GROUP=com.mogo.module
+POM_ARTIFACT_ID=module-guide
+VERSION_CODE=1
diff --git a/modules/mogo-module-guide/proguard-rules.pro b/modules/mogo-module-guide/proguard-rules.pro
new file mode 100644
index 0000000000..f1b424510d
--- /dev/null
+++ b/modules/mogo-module-guide/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
diff --git a/modules/mogo-module-guide/src/androidTest/java/com/mogo/module/guide/agreement/ExampleInstrumentedTest.kt b/modules/mogo-module-guide/src/androidTest/java/com/mogo/module/guide/agreement/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000000..50a1214bf8
--- /dev/null
+++ b/modules/mogo-module-guide/src/androidTest/java/com/mogo/module/guide/agreement/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.mogo.module.guide.agreement
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("com.mogo.module.guide.agreement.test", appContext.packageName)
+ }
+}
diff --git a/modules/mogo-module-guide/src/main/AndroidManifest.xml b/modules/mogo-module-guide/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..f00166428d
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/AndroidManifest.xml
@@ -0,0 +1 @@
+
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/GuideBizManager.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/GuideBizManager.kt
new file mode 100644
index 0000000000..c580a86fa6
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/GuideBizManager.kt
@@ -0,0 +1,34 @@
+package com.mogo.module.guide
+
+import com.alibaba.android.arouter.launcher.ARouter
+import com.mogo.module.guide.fragment.GuideFragment
+import com.mogo.module.guide.util.SharedPreferenceUtil.hasGuide
+import com.mogo.service.IMogoServiceApis
+import com.mogo.service.MogoServicePaths
+import com.mogo.service.fragmentmanager.FragmentDescriptor
+
+object GuideBizManager {
+
+ private var serviceApi: IMogoServiceApis? = null
+
+ fun init() {
+ initService()
+// addGuideFragmentToStack()
+ }
+
+ private fun initService() {
+ val mogoService = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation()
+ if (mogoService is IMogoServiceApis) {
+ serviceApi = mogoService
+ }
+ }
+
+ private fun addGuideFragmentToStack() {
+ if (!hasGuide()) {
+ serviceApi?.let {
+ val builderWrapper = FragmentDescriptor.Builder().fragment(GuideFragment()).build()
+ it.fragmentManagerApi.push(builderWrapper)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/GuideConstant.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/GuideConstant.kt
new file mode 100644
index 0000000000..8da06359eb
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/GuideConstant.kt
@@ -0,0 +1,16 @@
+package com.mogo.module.guide
+
+class GuideConstant {
+
+ companion object {
+ /**
+ * 展示用户引导或者用户协议模块地址
+ */
+ const val PATH_GUIDE_AGREEMENT_FRAGMENT = "/guideAgreement/showFragment"
+
+ /**
+ * provider模块实例名称(暂时仅有卡片用到)
+ */
+ const val PATH_GUIDE_AGREEMENT_MODULE_NAME = "GUIDE_AND_AGREEMENT"
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/MogoGuideProvider.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/MogoGuideProvider.kt
new file mode 100644
index 0000000000..ff568350da
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/MogoGuideProvider.kt
@@ -0,0 +1,71 @@
+package com.mogo.module.guide
+
+import android.content.Context
+import android.os.Bundle
+import android.view.View
+import androidx.fragment.app.Fragment
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.mogo.map.listener.IMogoMapListener
+import com.mogo.map.location.IMogoLocationListener
+import com.mogo.map.marker.IMogoMarkerClickListener
+import com.mogo.map.navi.IMogoNaviListener
+import com.mogo.module.guide.GuideConstant.Companion.PATH_GUIDE_AGREEMENT_FRAGMENT
+import com.mogo.module.guide.GuideConstant.Companion.PATH_GUIDE_AGREEMENT_MODULE_NAME
+import com.mogo.service.module.IMogoModuleLifecycle
+import com.mogo.service.module.IMogoModuleProvider
+import com.mogo.service.module.ModuleType
+
+@Route(path = PATH_GUIDE_AGREEMENT_FRAGMENT)
+class MogoGuideProvider : IMogoModuleProvider {
+
+ /**
+ * 卡片用到
+ */
+ override fun createFragment(context: Context?, data: Bundle?): Fragment? {
+ return null
+ }
+
+ override fun createView(context: Context?): View? {
+ return null
+ }
+
+ override fun getModuleName(): String {
+ return PATH_GUIDE_AGREEMENT_MODULE_NAME
+ }
+
+ override fun getCardLifecycle(): IMogoModuleLifecycle? {
+ return null
+ }
+
+ override fun getMapListener(): IMogoMapListener? {
+ return null
+ }
+
+ override fun getType(): Int {
+ return ModuleType.TYPE_SERVICE
+ }
+
+ override fun getNaviListener(): IMogoNaviListener? {
+ return null
+ }
+
+ override fun getLocationListener(): IMogoLocationListener? {
+ return null
+ }
+
+ override fun getMarkerClickListener(): IMogoMarkerClickListener? {
+ return null
+ }
+
+ override fun init(context: Context?) {
+ GuideBizManager.init()
+ }
+
+ override fun getAppPackage(): String? {
+ return null
+ }
+
+ override fun getAppName(): String? {
+ return null
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/fragment/GuideAdapter.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/fragment/GuideAdapter.kt
new file mode 100644
index 0000000000..36118c977c
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/fragment/GuideAdapter.kt
@@ -0,0 +1,40 @@
+package com.mogo.module.guide.fragment
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentActivity
+import androidx.viewpager2.adapter.FragmentStateAdapter
+import com.mogo.module.guide.guide.*
+
+class GuideAdapter(fragmentActivity: FragmentActivity) : FragmentStateAdapter(fragmentActivity) {
+
+ override fun getItemCount(): Int {
+ return guideList.size
+ }
+
+ override fun createFragment(position: Int): Fragment {
+ return guideList[position]
+ }
+
+ private val guideList: MutableList = mutableListOf()
+
+ companion object {
+ const val GUIDE_PAGE_START = 0
+ const val GUIDE_PAGE_CARD = 1
+ const val GUIDE_PAGE_ONLINE_CAR = 2
+ const val GUIDE_PAGE_NAVIGATION = 3
+ const val GUIDE_PAGE_LOCATION = 4
+ const val GUIDE_PAGE_APP_LIST = 5
+ const val GUIDE_PAGE_ENTRY_MAIN = 6
+ }
+
+ init {
+ guideList.add(GUIDE_PAGE_START, GuideStartFragment())
+ guideList.add(GUIDE_PAGE_CARD, GuideCardFragment())
+ guideList.add(GUIDE_PAGE_ONLINE_CAR, GuideOnLineCarFragment())
+ guideList.add(GUIDE_PAGE_NAVIGATION, GuideNavigationFragment())
+ guideList.add(GUIDE_PAGE_LOCATION, GuideLocationFragment())
+ guideList.add(GUIDE_PAGE_APP_LIST, GuideAppListFragment())
+ guideList.add(GUIDE_PAGE_ENTRY_MAIN, GuideEntryMainFragment())
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/fragment/GuideConstract.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/fragment/GuideConstract.kt
new file mode 100644
index 0000000000..22c574452a
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/fragment/GuideConstract.kt
@@ -0,0 +1,14 @@
+package com.mogo.module.guide.fragment
+
+import com.mogo.commons.mvp.IView
+
+class GuideConstract {
+
+ interface View:IView{
+
+ }
+
+ interface Biz{
+
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/fragment/GuideFragment.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/fragment/GuideFragment.kt
new file mode 100644
index 0000000000..df4c05aa52
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/fragment/GuideFragment.kt
@@ -0,0 +1,28 @@
+package com.mogo.module.guide.fragment
+
+import com.mogo.commons.mvp.MvpFragment
+import com.mogo.module.guide.R
+import com.mogo.utils.logger.Logger
+import kotlinx.android.synthetic.main.module_guide_fragment.*
+
+class GuideFragment : MvpFragment(), GuideConstract.View {
+
+ companion object {
+ const val TAG = "GuideFragment"
+ }
+
+ override fun getLayoutId(): Int {
+ return R.layout.module_guide_fragment
+ }
+
+ override fun createPresenter(): GuidePresenter {
+ return GuidePresenter(this)
+ }
+
+ override fun initViews() {
+ Logger.d(TAG, "init Views")
+// val adapter = GuideAdapter(context!!)
+// moduleGuideViewPager.adapter = adapter
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/fragment/GuidePresenter.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/fragment/GuidePresenter.kt
new file mode 100644
index 0000000000..09000d16f4
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/fragment/GuidePresenter.kt
@@ -0,0 +1,18 @@
+package com.mogo.module.guide.fragment
+
+import androidx.lifecycle.LifecycleOwner
+import com.mogo.commons.mvp.Presenter
+
+class GuidePresenter : Presenter, GuideConstract.Biz {
+
+ constructor(view: GuideConstract.View) : super(view)
+
+ companion object{
+ const val TAG = "GuidePresenter"
+ }
+
+ override fun onCreate(owner: LifecycleOwner) {
+ super.onCreate(owner)
+
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideAppListFragment.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideAppListFragment.kt
new file mode 100644
index 0000000000..48039db7f6
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideAppListFragment.kt
@@ -0,0 +1,27 @@
+package com.mogo.module.guide.guide
+
+import com.mogo.commons.mvp.IView
+import com.mogo.commons.mvp.MvpFragment
+import com.mogo.commons.mvp.Presenter
+import com.mogo.module.guide.R
+
+class GuideAppListFragment : MvpFragment>() {
+
+ override fun getLayoutId(): Int {
+ return R.layout.module_guide_item_app_list
+ }
+
+ override fun createPresenter(): Presenter {
+ return GuideAppListPresenter(this)
+ }
+
+ override fun initViews() {
+
+ }
+
+ class GuideAppListPresenter : Presenter {
+
+ constructor(view: IView?) : super(view)
+ }
+
+}
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideCardFragment.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideCardFragment.kt
new file mode 100644
index 0000000000..861a1e18dd
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideCardFragment.kt
@@ -0,0 +1,27 @@
+package com.mogo.module.guide.guide
+
+import com.mogo.commons.mvp.IView
+import com.mogo.commons.mvp.MvpFragment
+import com.mogo.commons.mvp.Presenter
+import com.mogo.module.guide.R
+
+class GuideCardFragment : MvpFragment>() {
+
+ override fun getLayoutId(): Int {
+ return R.layout.module_guide_item_card
+ }
+
+ override fun createPresenter(): Presenter {
+ return GuideCardPresenter(this)
+ }
+
+ override fun initViews() {
+
+ }
+
+ class GuideCardPresenter : Presenter {
+
+ constructor(view: IView?) : super(view)
+ }
+
+}
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideEntryMainFragment.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideEntryMainFragment.kt
new file mode 100644
index 0000000000..8a526abaf6
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideEntryMainFragment.kt
@@ -0,0 +1,28 @@
+package com.mogo.module.guide.guide
+
+import com.mogo.commons.mvp.IView
+import com.mogo.commons.mvp.MvpFragment
+import com.mogo.commons.mvp.Presenter
+import com.mogo.module.guide.R
+
+class GuideEntryMainFragment : MvpFragment>() {
+
+ override fun getLayoutId(): Int {
+ return R.layout.module_guide_item_entry_main
+ }
+
+ override fun createPresenter(): Presenter {
+ return GuideEntryPresenter(this)
+ }
+
+ override fun initViews() {
+
+ }
+
+
+ class GuideEntryPresenter : Presenter {
+
+ constructor(view: IView?) : super(view)
+ }
+
+}
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideLocationFragment.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideLocationFragment.kt
new file mode 100644
index 0000000000..38eadfe12f
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideLocationFragment.kt
@@ -0,0 +1,27 @@
+package com.mogo.module.guide.guide
+
+import com.mogo.commons.mvp.IView
+import com.mogo.commons.mvp.MvpFragment
+import com.mogo.commons.mvp.Presenter
+import com.mogo.module.guide.R
+
+class GuideLocationFragment : MvpFragment>() {
+
+ override fun getLayoutId(): Int {
+ return R.layout.module_guide_item_location
+ }
+
+ override fun createPresenter(): Presenter {
+ return GuideLocationPresenter(this)
+ }
+
+ override fun initViews() {
+
+ }
+
+ class GuideLocationPresenter : Presenter {
+
+ constructor(view: IView?) : super(view)
+ }
+
+}
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideNavigationFragment.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideNavigationFragment.kt
new file mode 100644
index 0000000000..03381ba438
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideNavigationFragment.kt
@@ -0,0 +1,27 @@
+package com.mogo.module.guide.guide
+
+import com.mogo.commons.mvp.IView
+import com.mogo.commons.mvp.MvpFragment
+import com.mogo.commons.mvp.Presenter
+import com.mogo.module.guide.R
+
+class GuideNavigationFragment : MvpFragment>() {
+
+ override fun getLayoutId(): Int {
+ return R.layout.module_guide_item_navigation
+ }
+
+ override fun createPresenter(): Presenter {
+ return GuideNavigationPresenter(this)
+ }
+
+ override fun initViews() {
+
+ }
+
+ class GuideNavigationPresenter : Presenter {
+
+ constructor(view: IView?) : super(view)
+ }
+
+}
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideOnLineCarFragment.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideOnLineCarFragment.kt
new file mode 100644
index 0000000000..253be825b9
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideOnLineCarFragment.kt
@@ -0,0 +1,27 @@
+package com.mogo.module.guide.guide
+
+import com.mogo.commons.mvp.IView
+import com.mogo.commons.mvp.MvpFragment
+import com.mogo.commons.mvp.Presenter
+import com.mogo.module.guide.R
+
+class GuideOnLineCarFragment : MvpFragment>() {
+
+ override fun getLayoutId(): Int {
+ return R.layout.module_guide_item_online_car
+ }
+
+ override fun createPresenter(): Presenter {
+ return GuideOnLineCarPresenter(this)
+ }
+
+ override fun initViews() {
+
+ }
+
+ class GuideOnLineCarPresenter : Presenter {
+
+ constructor(view: IView?) : super(view)
+ }
+
+}
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStartFragment.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStartFragment.kt
new file mode 100644
index 0000000000..fb1ea72c9e
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/guide/GuideStartFragment.kt
@@ -0,0 +1,26 @@
+package com.mogo.module.guide.guide
+
+import com.mogo.commons.mvp.IView
+import com.mogo.commons.mvp.MvpFragment
+import com.mogo.commons.mvp.Presenter
+import com.mogo.module.guide.R
+
+class GuideStartFragment : MvpFragment>() {
+
+ override fun getLayoutId(): Int {
+ return R.layout.module_guide_item_start
+ }
+
+ override fun createPresenter(): Presenter {
+ return GuideStartPresenter(this)
+ }
+
+ override fun initViews() {
+
+ }
+
+ class GuideStartPresenter : Presenter {
+
+ constructor(view: IView?) : super(view)
+ }
+}
diff --git a/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/util/SharedPreferenceUtil.kt b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/util/SharedPreferenceUtil.kt
new file mode 100644
index 0000000000..5348919b04
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/java/com/mogo/module/guide/util/SharedPreferenceUtil.kt
@@ -0,0 +1,14 @@
+package com.mogo.module.guide.util
+
+import com.mogo.commons.AbsMogoApplication
+import com.mogo.utils.storage.SharedPrefsMgr
+
+object SharedPreferenceUtil {
+
+ const val HAS_GUIDE = "HAS_GUIDE"
+
+ fun hasGuide(): Boolean {
+ return SharedPrefsMgr.getInstance(AbsMogoApplication.getApp()).getBoolean(HAS_GUIDE, false)
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/res/drawable/module_guide_selector_blue.xml b/modules/mogo-module-guide/src/main/res/drawable/module_guide_selector_blue.xml
new file mode 100644
index 0000000000..41b1dc661a
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/res/drawable/module_guide_selector_blue.xml
@@ -0,0 +1,15 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/res/layout/module_guide_fragment.xml b/modules/mogo-module-guide/src/main/res/layout/module_guide_fragment.xml
new file mode 100644
index 0000000000..d8c3c419fb
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/res/layout/module_guide_fragment.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/res/layout/module_guide_item_adapter.xml b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_adapter.xml
new file mode 100644
index 0000000000..3509b84116
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_adapter.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/res/layout/module_guide_item_app_list.xml b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_app_list.xml
new file mode 100644
index 0000000000..ff6613a6ab
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_app_list.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/res/layout/module_guide_item_card.xml b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_card.xml
new file mode 100644
index 0000000000..ec9030cac3
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_card.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/res/layout/module_guide_item_entry_main.xml b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_entry_main.xml
new file mode 100644
index 0000000000..e7c167e59c
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_entry_main.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/res/layout/module_guide_item_location.xml b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_location.xml
new file mode 100644
index 0000000000..fab64de64d
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_location.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/res/layout/module_guide_item_navigation.xml b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_navigation.xml
new file mode 100644
index 0000000000..c2c09f075d
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_navigation.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/res/layout/module_guide_item_online_car.xml b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_online_car.xml
new file mode 100644
index 0000000000..31f1619a91
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_online_car.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/res/layout/module_guide_item_start.xml b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_start.xml
new file mode 100644
index 0000000000..e3ca21994f
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/res/layout/module_guide_item_start.xml
@@ -0,0 +1,5 @@
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_app_list.png b/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_app_list.png
new file mode 100644
index 0000000000..a7d11657e9
Binary files /dev/null and b/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_app_list.png differ
diff --git a/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_card.png b/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_card.png
new file mode 100644
index 0000000000..0674913d2c
Binary files /dev/null and b/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_card.png differ
diff --git a/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_entry_main.png b/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_entry_main.png
new file mode 100644
index 0000000000..9065826d22
Binary files /dev/null and b/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_entry_main.png differ
diff --git a/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_location.png b/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_location.png
new file mode 100644
index 0000000000..049960bc72
Binary files /dev/null and b/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_location.png differ
diff --git a/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_navigation.png b/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_navigation.png
new file mode 100644
index 0000000000..3ef6e7c122
Binary files /dev/null and b/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_navigation.png differ
diff --git a/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_online_car.png b/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_online_car.png
new file mode 100644
index 0000000000..b3fa560556
Binary files /dev/null and b/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_online_car.png differ
diff --git a/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_start.png b/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_start.png
new file mode 100644
index 0000000000..98ba07b3fb
Binary files /dev/null and b/modules/mogo-module-guide/src/main/res/mipmap-ldpi/module_guide_item_start.png differ
diff --git a/modules/mogo-module-guide/src/main/res/values-ldpi-v4/dimens.xml b/modules/mogo-module-guide/src/main/res/values-ldpi-v4/dimens.xml
new file mode 100644
index 0000000000..86faec4c01
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/res/values-ldpi-v4/dimens.xml
@@ -0,0 +1,1046 @@
+
+
+ -32.8125px
+ -16.4062px
+ -10.9375px
+ -6.5625px
+ -5.4688px
+ -4.3750px
+ -2.7344px
+ -1.0938px
+ -0.5469px
+ 0.0000px
+ 0.0547px
+ 0.2734px
+ 0.5469px
+ 0.8203px
+ 1.0938px
+ 1.3672px
+ 1.6406px
+ 1.9141px
+ 2.1875px
+ 2.4609px
+ 2.7344px
+ 3.2812px
+ 3.8281px
+ 4.1016px
+ 4.3750px
+ 4.9219px
+ 5.4688px
+ 6.0156px
+ 6.5625px
+ 7.1094px
+ 7.6562px
+ 8.2031px
+ 8.7500px
+ 9.2969px
+ 9.8438px
+ 10.3906px
+ 10.9375px
+ 11.4844px
+ 12.0312px
+ 12.5781px
+ 13.1250px
+ 13.6719px
+ 14.2188px
+ 14.7656px
+ 15.3125px
+ 15.8594px
+ 16.4062px
+ 16.9531px
+ 17.5000px
+ 18.0469px
+ 18.5938px
+ 19.1406px
+ 19.6875px
+ 20.2344px
+ 20.7812px
+ 21.3281px
+ 21.8750px
+ 22.4219px
+ 22.9688px
+ 23.5156px
+ 24.0625px
+ 24.6094px
+ 25.1562px
+ 25.7031px
+ 26.2500px
+ 26.7969px
+ 27.3438px
+ 27.8906px
+ 28.4375px
+ 28.9844px
+ 29.5312px
+ 30.0781px
+ 30.6250px
+ 31.1719px
+ 31.7188px
+ 32.2656px
+ 32.8125px
+ 33.3594px
+ 33.9062px
+ 34.4531px
+ 35.0000px
+ 35.5469px
+ 36.0938px
+ 36.6406px
+ 37.1875px
+ 37.7344px
+ 38.2812px
+ 38.8281px
+ 39.3750px
+ 39.9219px
+ 40.4688px
+ 41.0156px
+ 41.5625px
+ 42.1094px
+ 42.6562px
+ 43.2031px
+ 43.7500px
+ 44.2969px
+ 44.8438px
+ 45.3906px
+ 45.9375px
+ 46.4844px
+ 47.0312px
+ 47.5781px
+ 48.1250px
+ 48.6719px
+ 49.2188px
+ 49.7656px
+ 50.3125px
+ 50.8594px
+ 51.4062px
+ 51.9531px
+ 52.5000px
+ 53.0469px
+ 53.5938px
+ 54.1406px
+ 54.6875px
+ 55.2344px
+ 55.7812px
+ 56.3281px
+ 56.8750px
+ 57.1484px
+ 57.4219px
+ 57.9688px
+ 58.5156px
+ 59.0625px
+ 59.6094px
+ 60.1562px
+ 60.7031px
+ 61.2500px
+ 61.7969px
+ 62.3438px
+ 62.8906px
+ 63.4375px
+ 63.9844px
+ 64.5312px
+ 65.0781px
+ 65.6250px
+ 66.1719px
+ 66.7188px
+ 67.2656px
+ 67.8125px
+ 68.3594px
+ 68.9062px
+ 69.4531px
+ 70.0000px
+ 70.5469px
+ 71.0938px
+ 71.6406px
+ 72.1875px
+ 72.7344px
+ 73.2812px
+ 73.5547px
+ 73.8281px
+ 74.3750px
+ 74.9219px
+ 75.4688px
+ 76.0156px
+ 76.5625px
+ 77.1094px
+ 77.6562px
+ 78.2031px
+ 78.7500px
+ 79.2969px
+ 79.8438px
+ 80.3906px
+ 80.9375px
+ 81.4844px
+ 82.0312px
+ 82.5781px
+ 83.1250px
+ 83.6719px
+ 84.2188px
+ 84.7656px
+ 85.3125px
+ 85.8594px
+ 86.4062px
+ 86.9531px
+ 87.5000px
+ 88.0469px
+ 88.5938px
+ 89.1406px
+ 89.6875px
+ 90.2344px
+ 90.7812px
+ 91.3281px
+ 91.8750px
+ 92.4219px
+ 92.9688px
+ 93.5156px
+ 94.0625px
+ 94.6094px
+ 95.1562px
+ 95.7031px
+ 96.2500px
+ 96.7969px
+ 97.3438px
+ 97.8906px
+ 98.4375px
+ 98.9844px
+ 99.5312px
+ 100.0781px
+ 100.6250px
+ 101.1719px
+ 101.7188px
+ 102.2656px
+ 102.8125px
+ 103.3594px
+ 103.9062px
+ 104.4531px
+ 104.5898px
+ 105.0000px
+ 105.5469px
+ 106.0938px
+ 106.6406px
+ 107.1875px
+ 107.7344px
+ 108.2812px
+ 108.8281px
+ 109.3750px
+ 109.9219px
+ 110.4688px
+ 111.0156px
+ 111.5625px
+ 112.1094px
+ 112.6562px
+ 113.2031px
+ 113.7500px
+ 114.2969px
+ 114.8438px
+ 115.3906px
+ 115.9375px
+ 116.4844px
+ 117.0312px
+ 117.5781px
+ 118.1250px
+ 118.6719px
+ 119.2188px
+ 119.7656px
+ 120.3125px
+ 120.8594px
+ 121.4062px
+ 121.9531px
+ 122.5000px
+ 123.0469px
+ 123.5938px
+ 124.1406px
+ 124.6875px
+ 125.2344px
+ 125.7812px
+ 126.3281px
+ 126.8750px
+ 127.4219px
+ 127.9688px
+ 128.5156px
+ 129.0625px
+ 129.6094px
+ 130.1562px
+ 130.7031px
+ 131.2500px
+ 131.7969px
+ 132.3438px
+ 132.8906px
+ 133.4375px
+ 133.9844px
+ 134.5312px
+ 135.0781px
+ 135.6250px
+ 136.1719px
+ 136.7188px
+ 137.2656px
+ 137.8125px
+ 138.3594px
+ 138.9062px
+ 139.4531px
+ 140.0000px
+ 140.5469px
+ 141.0938px
+ 141.6406px
+ 142.1875px
+ 142.7344px
+ 143.2812px
+ 143.8281px
+ 144.3750px
+ 144.9219px
+ 145.4688px
+ 146.0156px
+ 146.5625px
+ 147.1094px
+ 147.6562px
+ 148.2031px
+ 148.7500px
+ 149.2969px
+ 149.8438px
+ 150.3906px
+ 150.9375px
+ 151.4844px
+ 152.0312px
+ 152.5781px
+ 153.1250px
+ 153.6719px
+ 154.2188px
+ 154.7656px
+ 155.3125px
+ 155.8594px
+ 156.4062px
+ 156.9531px
+ 157.5000px
+ 158.0469px
+ 158.5938px
+ 159.1406px
+ 159.6875px
+ 160.2344px
+ 160.7812px
+ 161.3281px
+ 161.8750px
+ 162.4219px
+ 162.9688px
+ 163.5156px
+ 164.0625px
+ 164.6094px
+ 165.1562px
+ 165.7031px
+ 166.2500px
+ 166.7969px
+ 167.3438px
+ 167.8906px
+ 168.4375px
+ 168.9844px
+ 169.5312px
+ 170.0781px
+ 170.6250px
+ 171.1719px
+ 171.7188px
+ 172.2656px
+ 172.8125px
+ 173.3594px
+ 173.9062px
+ 174.4531px
+ 175.0000px
+ 175.5469px
+ 176.0938px
+ 176.6406px
+ 177.1875px
+ 177.7344px
+ 178.2812px
+ 178.8281px
+ 179.3750px
+ 179.9219px
+ 180.4688px
+ 181.0156px
+ 181.5625px
+ 182.1094px
+ 182.6562px
+ 183.2031px
+ 183.7500px
+ 184.2969px
+ 184.8438px
+ 185.3906px
+ 185.9375px
+ 186.4844px
+ 187.0312px
+ 187.5781px
+ 188.1250px
+ 188.6719px
+ 189.2188px
+ 189.7656px
+ 190.3125px
+ 190.8594px
+ 191.4062px
+ 191.9531px
+ 192.5000px
+ 193.0469px
+ 193.5938px
+ 194.1406px
+ 194.6875px
+ 195.2344px
+ 195.7812px
+ 196.3281px
+ 200.1562px
+ 200.7031px
+ 201.2500px
+ 201.7969px
+ 202.3438px
+ 202.8906px
+ 203.4375px
+ 203.9844px
+ 204.5312px
+ 205.0781px
+ 205.6250px
+ 206.1719px
+ 206.7188px
+ 207.2656px
+ 207.8125px
+ 208.3594px
+ 208.9062px
+ 209.4531px
+ 210.0000px
+ 210.5469px
+ 211.0938px
+ 211.6406px
+ 212.1875px
+ 212.7344px
+ 213.2812px
+ 213.8281px
+ 214.3750px
+ 214.9219px
+ 215.4688px
+ 216.0156px
+ 216.5625px
+ 217.1094px
+ 217.6562px
+ 218.2031px
+ 218.7500px
+ 219.2969px
+ 219.8438px
+ 220.3906px
+ 220.9375px
+ 221.4844px
+ 222.0312px
+ 222.5781px
+ 223.1250px
+ 223.6719px
+ 224.2188px
+ 224.7656px
+ 225.3125px
+ 225.8594px
+ 226.4062px
+ 226.9531px
+ 227.5000px
+ 228.0469px
+ 228.5938px
+ 229.1406px
+ 229.6875px
+ 230.2344px
+ 230.7812px
+ 231.3281px
+ 231.8750px
+ 232.4219px
+ 232.9688px
+ 233.5156px
+ 234.0625px
+ 234.6094px
+ 235.1562px
+ 235.7031px
+ 236.2500px
+ 236.7969px
+ 237.3438px
+ 237.8906px
+ 238.4375px
+ 238.9844px
+ 239.5312px
+ 240.0781px
+ 240.6250px
+ 241.1719px
+ 241.7188px
+ 242.2656px
+ 242.8125px
+ 243.3594px
+ 243.9062px
+ 244.4531px
+ 245.0000px
+ 245.5469px
+ 246.0938px
+ 246.6406px
+ 247.1875px
+ 247.7344px
+ 248.2812px
+ 248.8281px
+ 249.3750px
+ 249.9219px
+ 250.4688px
+ 251.0156px
+ 251.5625px
+ 252.1094px
+ 252.6562px
+ 253.2031px
+ 253.7500px
+ 254.2969px
+ 254.8438px
+ 255.3906px
+ 255.9375px
+ 256.4844px
+ 257.0312px
+ 257.5781px
+ 258.1250px
+ 258.6719px
+ 259.2188px
+ 259.7656px
+ 260.3125px
+ 260.8594px
+ 261.4062px
+ 261.9531px
+ 262.5000px
+ 263.0469px
+ 263.5938px
+ 264.1406px
+ 264.6875px
+ 265.2344px
+ 265.7812px
+ 266.3281px
+ 266.8750px
+ 267.4219px
+ 267.9688px
+ 268.5156px
+ 269.0625px
+ 269.6094px
+ 270.1562px
+ 270.7031px
+ 271.2500px
+ 271.7969px
+ 272.3438px
+ 272.8906px
+ 273.4375px
+ 273.9844px
+ 274.5312px
+ 275.0781px
+ 275.6250px
+ 276.1719px
+ 276.7188px
+ 277.2656px
+ 277.8125px
+ 278.3594px
+ 278.9062px
+ 279.4531px
+ 280.0000px
+ 280.5469px
+ 281.0938px
+ 281.6406px
+ 282.1875px
+ 282.7344px
+ 283.2812px
+ 283.8281px
+ 284.3750px
+ 284.9219px
+ 285.4688px
+ 286.0156px
+ 286.5625px
+ 287.1094px
+ 287.6562px
+ 288.2031px
+ 288.7500px
+ 289.2969px
+ 289.8438px
+ 290.3906px
+ 290.9375px
+ 291.4844px
+ 292.0312px
+ 292.5781px
+ 293.1250px
+ 293.6719px
+ 294.2188px
+ 294.7656px
+ 295.3125px
+ 295.8594px
+ 296.4062px
+ 296.9531px
+ 297.5000px
+ 298.0469px
+ 298.5938px
+ 299.1406px
+ 299.6875px
+ 300.2344px
+ 300.7812px
+ 301.3281px
+ 301.8750px
+ 302.4219px
+ 302.9688px
+ 303.5156px
+ 304.0625px
+ 304.6094px
+ 305.1562px
+ 305.7031px
+ 306.2500px
+ 306.7969px
+ 307.3438px
+ 307.8906px
+ 308.4375px
+ 308.9844px
+ 309.5312px
+ 310.0781px
+ 310.6250px
+ 311.1719px
+ 311.7188px
+ 312.2656px
+ 312.8125px
+ 313.3594px
+ 313.9062px
+ 314.4531px
+ 315.0000px
+ 315.5469px
+ 316.0938px
+ 316.6406px
+ 317.1875px
+ 317.7344px
+ 318.2812px
+ 318.8281px
+ 319.3750px
+ 319.9219px
+ 320.4688px
+ 321.0156px
+ 321.5625px
+ 322.1094px
+ 322.6562px
+ 323.2031px
+ 323.7500px
+ 324.2969px
+ 324.8438px
+ 325.3906px
+ 325.9375px
+ 326.4844px
+ 327.0312px
+ 327.5781px
+ 328.1250px
+ 328.6719px
+ 329.2188px
+ 329.7656px
+ 330.3125px
+ 330.8594px
+ 331.4062px
+ 331.9531px
+ 332.5000px
+ 333.0469px
+ 333.5938px
+ 334.1406px
+ 334.6875px
+ 335.2344px
+ 335.7812px
+ 336.3281px
+ 336.8750px
+ 337.4219px
+ 337.9688px
+ 338.5156px
+ 339.0625px
+ 339.6094px
+ 340.1562px
+ 340.7031px
+ 341.2500px
+ 341.7969px
+ 342.3438px
+ 342.8906px
+ 343.4375px
+ 343.9844px
+ 344.5312px
+ 345.0781px
+ 345.6250px
+ 346.1719px
+ 346.7188px
+ 347.2656px
+ 347.8125px
+ 348.3594px
+ 348.9062px
+ 349.4531px
+ 350.0000px
+ 350.5469px
+ 351.0938px
+ 351.6406px
+ 352.1875px
+ 352.7344px
+ 353.2812px
+ 353.8281px
+ 354.3750px
+ 354.9219px
+ 355.4688px
+ 356.0156px
+ 356.5625px
+ 357.1094px
+ 357.6562px
+ 358.2031px
+ 358.7500px
+ 359.2969px
+ 359.8438px
+ 360.3906px
+ 360.9375px
+ 361.4844px
+ 362.0312px
+ 362.5781px
+ 363.1250px
+ 363.6719px
+ 364.2188px
+ 364.7656px
+ 365.3125px
+ 365.8594px
+ 366.4062px
+ 366.9531px
+ 367.5000px
+ 368.0469px
+ 368.5938px
+ 369.1406px
+ 369.6875px
+ 370.2344px
+ 370.7812px
+ 371.3281px
+ 371.8750px
+ 372.4219px
+ 372.9688px
+ 373.5156px
+ 374.0625px
+ 374.6094px
+ 375.1562px
+ 375.7031px
+ 376.2500px
+ 376.7969px
+ 377.3438px
+ 377.8906px
+ 378.4375px
+ 378.9844px
+ 379.5312px
+ 380.0781px
+ 380.6250px
+ 381.1719px
+ 381.7188px
+ 382.2656px
+ 382.8125px
+ 383.3594px
+ 383.9062px
+ 384.4531px
+ 385.0000px
+ 385.5469px
+ 386.0938px
+ 386.6406px
+ 387.1875px
+ 387.7344px
+ 388.2812px
+ 388.8281px
+ 389.3750px
+ 389.9219px
+ 390.4688px
+ 391.0156px
+ 391.5625px
+ 392.1094px
+ 392.6562px
+ 393.2031px
+ 393.7500px
+ 394.2969px
+ 394.8438px
+ 395.3906px
+ 395.9375px
+ 396.4844px
+ 397.0312px
+ 397.5781px
+ 398.1250px
+ 398.6719px
+ 399.2188px
+ 399.7656px
+ 400.3125px
+ 400.8594px
+ 401.4062px
+ 401.9531px
+ 402.5000px
+ 403.0469px
+ 403.5938px
+ 404.1406px
+ 404.6875px
+ 405.2344px
+ 405.7812px
+ 406.3281px
+ 406.8750px
+ 407.4219px
+ 407.9688px
+ 408.5156px
+ 409.0625px
+ 409.6094px
+ 410.1562px
+ 410.7031px
+ 411.2500px
+ 411.7969px
+ 412.3438px
+ 412.8906px
+ 413.4375px
+ 413.9844px
+ 414.5312px
+ 415.0781px
+ 415.6250px
+ 416.1719px
+ 416.7188px
+ 417.2656px
+ 417.8125px
+ 418.3594px
+ 418.9062px
+ 419.4531px
+ 420.0000px
+ 420.5469px
+ 421.0938px
+ 421.6406px
+ 422.1875px
+ 422.7344px
+ 423.2812px
+ 423.8281px
+ 424.3750px
+ 424.9219px
+ 425.4688px
+ 426.0156px
+ 426.5625px
+ 427.1094px
+ 427.6562px
+ 428.2031px
+ 428.7500px
+ 429.2969px
+ 429.8438px
+ 430.3906px
+ 430.9375px
+ 431.4844px
+ 432.0312px
+ 432.5781px
+ 433.1250px
+ 433.6719px
+ 434.2188px
+ 434.7656px
+ 435.3125px
+ 435.8594px
+ 436.4062px
+ 436.9531px
+ 437.5000px
+ 438.0469px
+ 438.5938px
+ 439.1406px
+ 439.6875px
+ 440.2344px
+ 440.7812px
+ 441.3281px
+ 441.8750px
+ 442.4219px
+ 442.9688px
+ 443.5156px
+ 444.0625px
+ 444.6094px
+ 445.1562px
+ 445.7031px
+ 446.2500px
+ 446.7969px
+ 447.3438px
+ 447.8906px
+ 448.4375px
+ 448.9844px
+ 449.5312px
+ 450.0781px
+ 450.6250px
+ 451.1719px
+ 451.7188px
+ 452.2656px
+ 452.8125px
+ 453.3594px
+ 453.9062px
+ 454.4531px
+ 455.0000px
+ 455.5469px
+ 456.0938px
+ 456.6406px
+ 457.1875px
+ 457.7344px
+ 458.2812px
+ 458.8281px
+ 459.3750px
+ 459.9219px
+ 460.4688px
+ 461.0156px
+ 461.5625px
+ 462.1094px
+ 462.6562px
+ 463.2031px
+ 463.7500px
+ 464.2969px
+ 464.8438px
+ 465.3906px
+ 465.9375px
+ 466.4844px
+ 467.0312px
+ 467.5781px
+ 468.1250px
+ 468.6719px
+ 469.2188px
+ 469.7656px
+ 470.3125px
+ 470.8594px
+ 471.4062px
+ 471.9531px
+ 472.5000px
+ 473.0469px
+ 473.5938px
+ 474.1406px
+ 474.6875px
+ 475.2344px
+ 475.7812px
+ 476.3281px
+ 476.8750px
+ 477.4219px
+ 477.9688px
+ 478.5156px
+ 479.0625px
+ 479.6094px
+ 480.1562px
+ 480.7031px
+ 481.2500px
+ 481.7969px
+ 482.3438px
+ 482.8906px
+ 483.4375px
+ 483.9844px
+ 484.5312px
+ 485.0781px
+ 485.6250px
+ 486.1719px
+ 486.7188px
+ 487.2656px
+ 487.8125px
+ 488.3594px
+ 488.9062px
+ 489.4531px
+ 490.0000px
+ 490.5469px
+ 491.0938px
+ 491.6406px
+ 492.1875px
+ 492.7344px
+ 493.2812px
+ 493.8281px
+ 494.3750px
+ 494.9219px
+ 495.4688px
+ 496.0156px
+ 496.5625px
+ 497.1094px
+ 497.6562px
+ 498.2031px
+ 498.7500px
+ 499.2969px
+ 499.8438px
+ 500.3906px
+ 500.9375px
+ 501.4844px
+ 502.0312px
+ 502.5781px
+ 503.1250px
+ 503.6719px
+ 504.2188px
+ 504.7656px
+ 505.3125px
+ 505.8594px
+ 506.4062px
+ 506.9531px
+ 507.5000px
+ 508.0469px
+ 508.5938px
+ 509.1406px
+ 509.6875px
+ 510.2344px
+ 510.7812px
+ 511.3281px
+ 511.8750px
+ 512.4219px
+ 512.9688px
+ 513.5156px
+ 514.0625px
+ 514.6094px
+ 515.1562px
+ 515.7031px
+ 516.2500px
+ 516.7969px
+ 517.3438px
+ 517.8906px
+ 518.4375px
+ 518.9844px
+ 519.5312px
+ 520.0781px
+ 520.6250px
+ 521.1719px
+ 521.7188px
+ 522.2656px
+ 522.8125px
+ 523.3594px
+ 523.9062px
+ 524.4531px
+ 525.0000px
+ 525.5469px
+ 526.0938px
+ 526.6406px
+ 527.1875px
+ 527.7344px
+ 528.2812px
+ 528.8281px
+ 529.3750px
+ 529.9219px
+ 530.4688px
+ 531.0156px
+ 531.5625px
+ 532.1094px
+ 532.6562px
+ 533.2031px
+ 533.7500px
+ 534.2969px
+ 534.8438px
+ 535.3906px
+ 535.9375px
+ 536.4844px
+ 537.0312px
+ 537.5781px
+ 538.1250px
+ 538.6719px
+ 539.2188px
+ 539.7656px
+ 540.3125px
+ 540.8594px
+ 541.4062px
+ 541.9531px
+ 542.5000px
+ 543.0469px
+ 543.5938px
+ 544.1406px
+ 544.6875px
+ 545.2344px
+ 545.7812px
+ 546.3281px
+ 710.9375px
+ 3.2812px
+ 3.8281px
+ 4.3750px
+ 4.9219px
+ 5.4688px
+ 6.0156px
+ 6.5625px
+ 7.1094px
+ 7.6562px
+ 8.2031px
+ 8.7500px
+ 9.2969px
+ 9.8438px
+ 10.3906px
+ 10.9375px
+ 11.4844px
+ 12.0312px
+ 12.5781px
+ 13.1250px
+ 13.6719px
+ 15.3125px
+ 16.4062px
+ 17.5000px
+ 18.5938px
+ 19.6875px
+ 20.7812px
+ 21.8750px
+ 22.9688px
+ 26.2500px
+
diff --git a/modules/mogo-module-guide/src/main/res/values-xhdpi-v4/dimens.xml b/modules/mogo-module-guide/src/main/res/values-xhdpi-v4/dimens.xml
new file mode 100644
index 0000000000..d56caf71d6
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/res/values-xhdpi-v4/dimens.xml
@@ -0,0 +1,1054 @@
+
+
+
+
+
+ -60px
+ -30px
+ -20px
+ -12px
+ -10px
+ -8px
+ -5px
+ -2px
+ -1px
+ 0px
+ 0.1px
+ 0.5px
+ 1px
+ 1.5px
+ 2px
+ 2.5px
+ 3px
+ 3.5px
+ 4px
+ 4.5px
+ 5px
+ 6px
+ 7px
+ 7.5px
+ 8px
+ 9px
+ 10px
+ 11px
+ 12px
+ 13px
+ 14px
+ 15px
+ 16px
+ 17px
+ 18px
+ 19px
+ 20px
+ 21px
+ 22px
+ 23px
+ 24px
+ 25px
+ 26px
+ 27px
+ 28px
+ 29px
+ 30px
+ 31px
+ 32px
+ 33px
+ 34px
+ 35px
+ 36px
+ 37px
+ 38px
+ 39px
+ 40px
+ 41px
+ 42px
+ 43px
+ 44px
+ 45px
+ 46px
+ 47px
+ 48px
+ 49px
+ 50px
+ 51px
+ 52px
+ 53px
+ 54px
+ 55px
+ 56px
+ 57px
+ 58px
+ 59px
+ 60px
+ 61px
+ 62px
+ 63px
+ 64px
+ 65px
+ 66px
+ 67px
+ 68px
+ 69px
+ 70px
+ 71px
+ 72px
+ 73px
+ 74px
+ 75px
+ 76px
+ 77px
+ 78px
+ 79px
+ 80px
+ 81px
+ 82px
+ 83px
+ 84px
+ 85px
+ 86px
+ 87px
+ 88px
+ 89px
+ 90px
+ 91px
+ 92px
+ 93px
+ 94px
+ 95px
+ 96px
+ 97px
+ 98px
+ 99px
+ 100px
+ 101px
+ 102px
+ 103px
+ 104px
+ 104.5px
+ 105px
+ 106px
+ 107px
+ 108px
+ 109px
+ 110px
+ 111px
+ 112px
+ 113px
+ 114px
+ 115px
+ 116px
+ 117px
+ 118px
+ 119px
+ 120px
+ 121px
+ 122px
+ 123px
+ 124px
+ 125px
+ 126px
+ 127px
+ 128px
+ 129px
+ 130px
+ 131px
+ 132px
+ 133px
+ 134px
+ 134.5px
+ 135px
+ 136px
+ 137px
+ 138px
+ 139px
+ 140px
+ 141px
+ 142px
+ 143px
+ 144px
+ 145px
+ 146px
+ 147px
+ 148px
+ 149px
+ 150px
+ 151px
+ 152px
+ 153px
+ 154px
+ 155px
+ 156px
+ 157px
+ 158px
+ 159px
+ 160px
+ 161px
+ 162px
+ 163px
+ 164px
+ 165px
+ 166px
+ 167px
+ 168px
+ 169px
+ 170px
+ 171px
+ 172px
+ 173px
+ 174px
+ 175px
+ 176px
+ 177px
+ 178px
+ 179px
+ 180px
+ 181px
+ 182px
+ 183px
+ 184px
+ 185px
+ 186px
+ 187px
+ 188px
+ 189px
+ 190px
+ 191px
+ 191.25px
+ 192px
+ 193px
+ 194px
+ 195px
+ 196px
+ 197px
+ 198px
+ 199px
+ 200px
+ 201px
+ 202px
+ 203px
+ 204px
+ 205px
+ 206px
+ 207px
+ 208px
+ 209px
+ 210px
+ 211px
+ 212px
+ 213px
+ 214px
+ 215px
+ 216px
+ 217px
+ 218px
+ 219px
+ 220px
+ 221px
+ 222px
+ 223px
+ 224px
+ 225px
+ 226px
+ 227px
+ 228px
+ 229px
+ 230px
+ 231px
+ 232px
+ 233px
+ 234px
+ 235px
+ 236px
+ 237px
+ 238px
+ 239px
+ 240px
+ 241px
+ 242px
+ 243px
+ 244px
+ 245px
+ 246px
+ 247px
+ 248px
+ 249px
+ 250px
+ 251px
+ 252px
+ 253px
+ 254px
+ 255px
+ 256px
+ 257px
+ 258px
+ 259px
+ 260px
+ 261px
+ 262px
+ 263px
+ 264px
+ 265px
+ 266px
+ 267px
+ 268px
+ 269px
+ 270px
+ 271px
+ 272px
+ 273px
+ 274px
+ 275px
+ 276px
+ 277px
+ 278px
+ 279px
+ 280px
+ 281px
+ 282px
+ 283px
+ 284px
+ 285px
+ 286px
+ 287px
+ 288px
+ 289px
+ 290px
+ 291px
+ 292px
+ 293px
+ 294px
+ 295px
+ 296px
+ 297px
+ 298px
+ 299px
+ 300px
+ 301px
+ 302px
+ 303px
+ 304px
+ 305px
+ 306px
+ 307px
+ 308px
+ 309px
+ 310px
+ 311px
+ 312px
+ 313px
+ 314px
+ 315px
+ 316px
+ 317px
+ 318px
+ 319px
+ 320px
+ 321px
+ 322px
+ 323px
+ 324px
+ 325px
+ 326px
+ 327px
+ 328px
+ 329px
+ 330px
+ 331px
+ 332px
+ 333px
+ 334px
+ 335px
+ 336px
+ 337px
+ 338px
+ 339px
+ 340px
+ 341px
+ 342px
+ 343px
+ 344px
+ 345px
+ 346px
+ 347px
+ 348px
+ 349px
+ 350px
+ 351px
+ 352px
+ 353px
+ 354px
+ 355px
+ 356px
+ 357px
+ 358px
+ 359px
+ 366px
+ 367px
+ 368px
+ 369px
+ 370px
+ 371px
+ 372px
+ 373px
+ 374px
+ 375px
+ 376px
+ 377px
+ 378px
+ 379px
+ 380px
+ 381px
+ 382px
+ 383px
+ 384px
+ 385px
+ 386px
+ 387px
+ 388px
+ 389px
+ 390px
+ 391px
+ 392px
+ 393px
+ 394px
+ 395px
+ 396px
+ 397px
+ 398px
+ 399px
+ 400px
+ 401px
+ 402px
+ 403px
+ 404px
+ 405px
+ 406px
+ 407px
+ 408px
+ 409px
+ 410px
+ 411px
+ 412px
+ 413px
+ 414px
+ 415px
+ 416px
+ 417px
+ 418px
+ 419px
+ 420px
+ 421px
+ 422px
+ 423px
+ 424px
+ 425px
+ 426px
+ 427px
+ 428px
+ 429px
+ 430px
+ 431px
+ 432px
+ 433px
+ 434px
+ 435px
+ 436px
+ 437px
+ 438px
+ 439px
+ 440px
+ 441px
+ 442px
+ 443px
+ 444px
+ 445px
+ 446px
+ 447px
+ 448px
+ 449px
+ 450px
+ 451px
+ 452px
+ 453px
+ 454px
+ 455px
+ 456px
+ 457px
+ 458px
+ 459px
+ 460px
+ 461px
+ 462px
+ 463px
+ 464px
+ 465px
+ 466px
+ 467px
+ 468px
+ 469px
+ 470px
+ 471px
+ 472px
+ 473px
+ 474px
+ 475px
+ 476px
+ 477px
+ 478px
+ 479px
+ 480px
+ 481px
+ 482px
+ 483px
+ 484px
+ 485px
+ 486px
+ 487px
+ 488px
+ 489px
+ 490px
+ 491px
+ 492px
+ 493px
+ 494px
+ 495px
+ 496px
+ 497px
+ 498px
+ 499px
+ 500px
+ 501px
+ 502px
+ 503px
+ 504px
+ 505px
+ 506px
+ 507px
+ 508px
+ 509px
+ 510px
+ 511px
+ 512px
+ 513px
+ 514px
+ 515px
+ 516px
+ 517px
+ 518px
+ 519px
+ 520px
+ 521px
+ 522px
+ 523px
+ 524px
+ 525px
+ 526px
+ 527px
+ 528px
+ 529px
+ 530px
+ 531px
+ 532px
+ 533px
+ 534px
+ 535px
+ 536px
+ 537px
+ 538px
+ 539px
+ 540px
+ 541px
+ 542px
+ 543px
+ 544px
+ 545px
+ 546px
+ 547px
+ 548px
+ 549px
+ 550px
+ 551px
+ 552px
+ 553px
+ 554px
+ 555px
+ 556px
+ 557px
+ 558px
+ 559px
+ 560px
+ 561px
+ 562px
+ 563px
+ 564px
+ 565px
+ 566px
+ 567px
+ 568px
+ 569px
+ 570px
+ 571px
+ 572px
+ 573px
+ 574px
+ 575px
+ 576px
+ 577px
+ 578px
+ 579px
+ 580px
+ 581px
+ 582px
+ 583px
+ 584px
+ 585px
+ 586px
+ 587px
+ 588px
+ 589px
+ 590px
+ 591px
+ 592px
+ 593px
+ 594px
+ 595px
+ 596px
+ 597px
+ 598px
+ 599px
+ 600px
+ 601px
+ 602px
+ 603px
+ 604px
+ 605px
+ 606px
+ 607px
+ 608px
+ 609px
+ 610px
+ 611px
+ 612px
+ 613px
+ 614px
+ 615px
+ 616px
+ 617px
+ 618px
+ 619px
+ 620px
+ 621px
+ 622px
+ 623px
+ 624px
+ 625px
+ 626px
+ 627px
+ 628px
+ 629px
+ 630px
+ 631px
+ 632px
+ 633px
+ 634px
+ 635px
+ 636px
+ 637px
+ 638px
+ 639px
+ 640px
+ 641px
+ 642px
+ 643px
+ 644px
+ 645px
+ 646px
+ 647px
+ 648px
+ 649px
+ 650px
+ 651px
+ 652px
+ 653px
+ 654px
+ 655px
+ 656px
+ 657px
+ 658px
+ 659px
+ 660px
+ 661px
+ 662px
+ 663px
+ 664px
+ 665px
+ 666px
+ 667px
+ 668px
+ 669px
+ 670px
+ 671px
+ 672px
+ 673px
+ 674px
+ 675px
+ 676px
+ 677px
+ 678px
+ 679px
+ 680px
+ 681px
+ 682px
+ 683px
+ 684px
+ 685px
+ 686px
+ 687px
+ 688px
+ 689px
+ 690px
+ 691px
+ 692px
+ 693px
+ 694px
+ 695px
+ 696px
+ 697px
+ 698px
+ 699px
+ 700px
+ 701px
+ 702px
+ 703px
+ 704px
+ 705px
+ 706px
+ 707px
+ 708px
+ 709px
+ 710px
+ 711px
+ 712px
+ 713px
+ 714px
+ 715px
+ 716px
+ 717px
+ 718px
+ 719px
+ 720px
+ 721px
+ 722px
+ 723px
+ 724px
+ 725px
+ 726px
+ 727px
+ 728px
+ 729px
+ 730px
+ 731px
+ 732px
+ 733px
+ 734px
+ 735px
+ 736px
+ 737px
+ 738px
+ 739px
+ 740px
+ 741px
+ 742px
+ 743px
+ 744px
+ 745px
+ 746px
+ 747px
+ 748px
+ 749px
+ 750px
+ 751px
+ 752px
+ 753px
+ 754px
+ 755px
+ 756px
+ 757px
+ 758px
+ 759px
+ 760px
+ 761px
+ 762px
+ 763px
+ 764px
+ 765px
+ 766px
+ 767px
+ 768px
+ 769px
+ 770px
+ 771px
+ 772px
+ 773px
+ 774px
+ 775px
+ 776px
+ 777px
+ 778px
+ 779px
+ 780px
+ 781px
+ 782px
+ 783px
+ 784px
+ 785px
+ 786px
+ 787px
+ 788px
+ 789px
+ 790px
+ 791px
+ 792px
+ 793px
+ 794px
+ 795px
+ 796px
+ 797px
+ 798px
+ 799px
+ 800px
+ 801px
+ 802px
+ 803px
+ 804px
+ 805px
+ 806px
+ 807px
+ 808px
+ 809px
+ 810px
+ 811px
+ 812px
+ 813px
+ 814px
+ 815px
+ 816px
+ 817px
+ 818px
+ 819px
+ 820px
+ 821px
+ 822px
+ 823px
+ 824px
+ 825px
+ 826px
+ 827px
+ 828px
+ 829px
+ 830px
+ 831px
+ 832px
+ 833px
+ 834px
+ 835px
+ 836px
+ 837px
+ 838px
+ 839px
+ 840px
+ 841px
+ 842px
+ 843px
+ 844px
+ 845px
+ 846px
+ 847px
+ 848px
+ 849px
+ 850px
+ 851px
+ 852px
+ 853px
+ 854px
+ 855px
+ 856px
+ 857px
+ 858px
+ 859px
+ 860px
+ 861px
+ 862px
+ 863px
+ 864px
+ 865px
+ 866px
+ 867px
+ 868px
+ 869px
+ 870px
+ 871px
+ 872px
+ 873px
+ 874px
+ 875px
+ 876px
+ 877px
+ 878px
+ 879px
+ 880px
+ 881px
+ 882px
+ 883px
+ 884px
+ 885px
+ 886px
+ 887px
+ 888px
+ 889px
+ 890px
+ 891px
+ 892px
+ 893px
+ 894px
+ 895px
+ 896px
+ 897px
+ 898px
+ 899px
+ 900px
+ 901px
+ 902px
+ 903px
+ 904px
+ 905px
+ 906px
+ 907px
+ 908px
+ 909px
+ 910px
+ 911px
+ 912px
+ 913px
+ 914px
+ 915px
+ 916px
+ 917px
+ 918px
+ 919px
+ 920px
+ 921px
+ 922px
+ 923px
+ 924px
+ 925px
+ 926px
+ 927px
+ 928px
+ 929px
+ 930px
+ 931px
+ 932px
+ 933px
+ 934px
+ 935px
+ 936px
+ 937px
+ 938px
+ 939px
+ 940px
+ 941px
+ 942px
+ 943px
+ 944px
+ 945px
+ 946px
+ 947px
+ 948px
+ 949px
+ 950px
+ 951px
+ 952px
+ 953px
+ 954px
+ 955px
+ 956px
+ 957px
+ 958px
+ 959px
+ 960px
+ 961px
+ 962px
+ 963px
+ 964px
+ 965px
+ 966px
+ 967px
+ 968px
+ 969px
+ 970px
+ 971px
+ 972px
+ 973px
+ 974px
+ 975px
+ 976px
+ 977px
+ 978px
+ 979px
+ 980px
+ 981px
+ 982px
+ 983px
+ 984px
+ 985px
+ 986px
+ 987px
+ 988px
+ 989px
+ 990px
+ 991px
+ 992px
+ 993px
+ 994px
+ 995px
+ 996px
+ 997px
+ 998px
+ 999px
+ 1300px
+
+
+
+
+ 6px
+ 7px
+ 8px
+ 9px
+ 10px
+ 11px
+ 12px
+ 13px
+ 14px
+ 15px
+ 16px
+ 17px
+ 18px
+ 19px
+ 20px
+ 21px
+ 22px
+ 23px
+ 24px
+ 25px
+ 28px
+ 30px
+ 32px
+ 34px
+ 36px
+ 38px
+ 40px
+ 42px
+ 48px
+
+
diff --git a/modules/mogo-module-guide/src/main/res/values/color.xml b/modules/mogo-module-guide/src/main/res/values/color.xml
new file mode 100644
index 0000000000..7ee5cd71b6
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/res/values/color.xml
@@ -0,0 +1,4 @@
+
+
+ #3B91FF
+
\ No newline at end of file
diff --git a/modules/mogo-module-guide/src/main/res/values/strings.xml b/modules/mogo-module-guide/src/main/res/values/strings.xml
new file mode 100644
index 0000000000..377130cc80
--- /dev/null
+++ b/modules/mogo-module-guide/src/main/res/values/strings.xml
@@ -0,0 +1,6 @@
+
+ mogo-module-guide-agreement
+ 进入首页
+ 下一步
+ 跳过教程
+
diff --git a/modules/mogo-module-guide/src/test/java/com/mogo/module/guide/agreement/ExampleUnitTest.kt b/modules/mogo-module-guide/src/test/java/com/mogo/module/guide/agreement/ExampleUnitTest.kt
new file mode 100644
index 0000000000..7570d3781c
--- /dev/null
+++ b/modules/mogo-module-guide/src/test/java/com/mogo/module/guide/agreement/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.mogo.module.guide.agreement
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
diff --git a/settings.gradle b/settings.gradle
index 4747a1bb37..8fd8f035d7 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -13,6 +13,8 @@ include ':modules:mogo-module-search'
include ':modules:mogo-module-share'
include ':modules:mogo-module-service'
include ':modules:mogo-module-back'
+include ':modules:mogo-module-authorize'
+include ':modules:mogo-module-guide'
include ':libraries:map-amap'
//include ':libraries:map-baidu'
include ':libraries:mogo-map-api'