From 94de1c463cd492dd17e9e869908dd818c48896c0 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 23 Jul 2020 10:05:18 +0800 Subject: [PATCH] note the problem dialog --- .idea/misc.xml | 2 +- .../com/mogo/launcher/MogoApplication.java | 3 +- .../authprovider/biz/MogoAuthorizeProvider.kt | 20 +- .../authprovider/invoke/AuthorizeConstant.kt | 5 - .../launcher/MogoMainAuthorize.kt | 23 +-- .../authorize/layout/AuthorizeDialog.kt | 176 ++++++++++++++++++ .../authorize/layout/AuthorizeLayout.kt | 4 +- .../com/mogo/module/common/wm/DialogImpl.java | 1 + .../src/main/res/values-xhdpi/dimens.xml | 2 + .../com/mogo/module/main/MainActivity.java | 2 +- 10 files changed, 203 insertions(+), 35 deletions(-) create mode 100644 modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/layout/AuthorizeDialog.kt diff --git a/.idea/misc.xml b/.idea/misc.xml index cd77a1f062..21e99e2dc0 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 0315d50b8a..e2b375ce99 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -2,7 +2,6 @@ package com.mogo.launcher; import android.content.Context; import android.content.Intent; -import android.os.Build; import android.util.Log; import com.alibaba.android.arouter.launcher.ARouter; @@ -54,7 +53,7 @@ public class MogoApplication extends AbsMogoApplication { Logger.init( BuildConfig.DEBUG ? LogLevel.DEBUG : LogLevel.OFF ); // MogoModulePaths.addModule(new MogoModule(PATH_GUIDE_FRAGMENT, PATH_GUIDE_MODULE_NAME)); - MogoModulePaths.addModule( new MogoModule( AuthorizeConstant.PATH_AGREEMENT_FRAGMENT, AuthorizeConstant.PATH_AGREEMENT_MODULE_NAME ) ); + MogoModulePaths.addModule( new MogoModule( MogoServicePaths.PATH_AGREEMENT, AuthorizeConstant.PATH_AGREEMENT_MODULE_NAME ) ); //运营位卡片,需要默认显示,放在第一个加载 if ( DebugConfig.isLauncher() ) { diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/MogoAuthorizeProvider.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/MogoAuthorizeProvider.kt index 24c364f11d..76b7977927 100644 --- a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/MogoAuthorizeProvider.kt +++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/authprovider/biz/MogoAuthorizeProvider.kt @@ -9,17 +9,16 @@ 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.authorize.authprovider.invoke.AuthorizeConstant.Companion.PATH_AGREEMENT_FRAGMENT import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant.Companion.PATH_AGREEMENT_MODULE_NAME import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant.Companion.AUTHORIZE_TYPE_LAUNCHER_MAIN import com.mogo.module.authorize.authprovider.launcher.MogoMainAuthorize.Companion.mogoAuthShow +import com.mogo.service.MogoServicePaths import com.mogo.service.auth.IMogoAuthManager import com.mogo.service.module.IMogoModuleLifecycle -import com.mogo.service.module.IMogoModuleProvider import com.mogo.service.module.ModuleType import com.mogo.utils.logger.Logger -@Route(path = PATH_AGREEMENT_FRAGMENT) +@Route(path = MogoServicePaths.PATH_AGREEMENT) class MogoAuthorizeProvider : IMogoAuthManager { companion object { @@ -49,7 +48,7 @@ class MogoAuthorizeProvider : IMogoAuthManager { } override fun getType(): Int { - return ModuleType.TYPE_SERVICE + return 0 } override fun getNaviListener(): IMogoNaviListener? { @@ -66,12 +65,6 @@ class MogoAuthorizeProvider : IMogoAuthManager { override fun resetContext(context: Context?) { mContext = context - } - - override fun init(context: Context) { - //todo 引导判断暂时去掉 后续引导流程更改完再放开 -// todo if (isDeviceOfD() && hasGuide() && mogoAuthShow.needAuthorize(AUTHORIZE_TYPE_LAUNCHER_MAIN)) { - // todo F系列暂时没有授权功能 1.1需求中添加 全量上 if (mogoAuthShow.needAuthorize(AUTHORIZE_TYPE_LAUNCHER_MAIN)) { mogoAuthShow.invokeAuthorizeForShow(mContext!!) } else { @@ -81,6 +74,13 @@ class MogoAuthorizeProvider : IMogoAuthManager { } } + override fun init(context: Context) { + //todo 引导判断暂时去掉 后续引导流程更改完再放开 +// todo if (isDeviceOfD() && hasGuide() && mogoAuthShow.needAuthorize(AUTHORIZE_TYPE_LAUNCHER_MAIN)) { + // todo F系列暂时没有授权功能 1.1需求中添加 全量上 + + } + override fun getAppPackage(): String? { return null } 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 index d41c4df56e..3da6930843 100644 --- 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 @@ -6,11 +6,6 @@ class AuthorizeConstant { const val PROVIDER_MODULE = "/authorize/biz" const val PROVIDER_LAUNCHER = "/authorize/showbiz" - /** - * 展示用户协议模块地址 - */ - const val PATH_AGREEMENT_FRAGMENT = "/agreement/showFragment" - /** * provider模块实例名称(暂时仅有卡片用到) */ 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 index a8dde7f727..13c2da0e65 100644 --- 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 @@ -2,15 +2,12 @@ package com.mogo.module.authorize.authprovider.launcher import android.content.Context import android.os.Looper -import com.mogo.commons.AbsMogoApplication import com.mogo.module.authorize.authprovider.biz.MogoAuthorizeManagerImpl import com.mogo.module.authorize.authprovider.biz.MogoAuthorizeRegisterHandler -import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant.Companion.AUTHORIZE_TYPE_LAUNCHER_MAIN -import com.mogo.module.authorize.layout.AuthorizeLayout +import com.mogo.module.authorize.layout.AuthorizeDialog import com.mogo.module.authorize.model.proxy.toAuthorizeType import com.mogo.module.authorize.util.SharedPreferenceUtil.hasAuth -import com.mogo.module.common.wm.WindowManagerView import com.mogo.utils.logger.Logger class MogoMainAuthorize private constructor() : MogoAuthorizeManagerImpl(), IMogoAuthorizeMainProvider { @@ -26,7 +23,7 @@ class MogoMainAuthorize private constructor() : MogoAuthorizeManagerImpl(), IMog private var mContext:Context? = null - private var windowManagerView: WindowManagerView? = null + private var authorizeDialog: AuthorizeDialog? = null override fun hasRegister(tag: String): Boolean { if (tag.isNullOrBlank()) return false @@ -44,7 +41,7 @@ class MogoMainAuthorize private constructor() : MogoAuthorizeManagerImpl(), IMog fun invokeAuthorizeForShow(context: Context) { mContext = context - pushLayoutToMainWindow(AUTHORIZE_TYPE_LAUNCHER_MAIN) +// pushLayoutToMainWindow(AUTHORIZE_TYPE_LAUNCHER_MAIN) } fun showAuthorizeView(tag: String, forbiddenVoice: (() -> Unit), onError: ((String) -> Unit)) { @@ -67,25 +64,23 @@ class MogoMainAuthorize private constructor() : MogoAuthorizeManagerImpl(), IMog Logger.d(TAG, "ready to forbidden voice") forbiddenVoice.invoke() Logger.d(TAG, "ready to push fragment") - pushLayoutToMainWindow(tag) +// pushLayoutToMainWindow(tag) } fun hideAuthorizeView() { - windowManagerView?.dismiss() + authorizeDialog?.dismiss() } private fun pushLayoutToMainWindow(tag: String) { - if (windowManagerView == null) { - val authorizeLayout = AuthorizeLayout(tag) - val view = authorizeLayout.getLayoutView() - windowManagerView = WindowManagerView.Builder(mContext).contentView(view).build() + if (authorizeDialog == null) { + authorizeDialog = AuthorizeDialog(tag,mContext!!) } - if (windowManagerView!!.isShowing) { + if (authorizeDialog!!.isShowing) { Logger.d(TAG, "User is operation authorization, do not repeat invoke") return } else { Logger.d(TAG, "pushLayoutToMainWindow") - windowManagerView!!.show() + authorizeDialog!!.show() } } diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/layout/AuthorizeDialog.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/layout/AuthorizeDialog.kt new file mode 100644 index 0000000000..4dc7287746 --- /dev/null +++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/layout/AuthorizeDialog.kt @@ -0,0 +1,176 @@ +package com.mogo.module.authorize.layout + +import android.content.Context +import android.text.Html +import android.view.View +import android.widget.Button +import android.widget.TextView +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.commons.AbsMogoApplication +import com.mogo.module.authorize.R +import com.mogo.module.authorize.util.AnalyticsUtil +import com.mogo.module.authorize.voice.IVoiceAuthorizeIntentListener +import com.mogo.module.authorize.voice.IVoiceCommandListener +import com.mogo.module.authorize.voice.VoiceUtil +import com.mogo.module.common.dialog.BaseFloatDialog +import com.mogo.utils.logger.Logger +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.async +import kotlinx.coroutines.withContext + +class AuthorizeDialog : BaseFloatDialog, View.OnClickListener, IVoiceCommandListener, IVoiceAuthorizeIntentListener { + + private var mContext: Context? = null + private var invokeTag: String? = null + + private var agreementId: Long = 0L + + private var clTopParent: ConstraintLayout? = null + private var clErrorContainer: ConstraintLayout? = null + private var clLoadAuthorizeContainer: ConstraintLayout? = null + private var clContainer: ConstraintLayout? = null + private var clAuthorizeLoading: ConstraintLayout? = null + private var btnAgree: Button? = null + private var btnDisAgree: Button? = null + private var btnLoadingError: Button? = null + private var tvTitle: TextView? = null + private var tvContent: TextView? = null + private var tvButtonContent: TextView? = null + private var tvLastContent: TextView? = null + + private var authorizeController: AuthorizeController? = null + + constructor(invokeTag: String, context: Context) : super(context) { + mContext = context + this.invokeTag = invokeTag + initView() + } + + private fun initView() { + setContentView(R.layout.module_authorize_fragment) + initViews() + } + + fun initViews() { + Logger.d(AuthorizeLayout.TAG, "initView ") + AnalyticsUtil.track(AnalyticsUtil.INVOKE_TRACK_AUTHORIZE_SHOW) + init() + Logger.d(AuthorizeLayout.TAG, "invokeTag :$invokeTag") + authorizeController = AuthorizeController(invokeTag!!) + invokeAuthorizationContent() + VoiceUtil.registerAll(this, this) + } + + private fun init() { + clTopParent = findViewById(R.id.clAuthorizeTopParent) + clErrorContainer = findViewById(R.id.clLoadingErrorContainer) + clLoadAuthorizeContainer = findViewById(R.id.clLoadingAuthorizeContainer) + clContainer = findViewById(R.id.clAuthorizeContainer) + clAuthorizeLoading = findViewById(R.id.clAuthorizeLoading) + btnAgree = findViewById(R.id.btnAuthorizeAgree) + btnDisAgree = findViewById(R.id.btnAuthorizeDisAgree) + btnLoadingError = findViewById(R.id.btnAuthorizeLoadingError) + tvTitle = findViewById(R.id.tvAuthorizeTitle) + tvContent = findViewById(R.id.tvAuthorizeContent) + tvButtonContent = findViewById(R.id.tvAuthorizeButtonContent) + tvLastContent = findViewById(R.id.tvAuthorizeLastContent) + btnAgree?.setOnClickListener(this) + btnDisAgree?.setOnClickListener(this) + btnLoadingError?.setOnClickListener(this) + clTopParent?.setOnClickListener(this) + clContainer?.setOnClickListener(this) + clErrorContainer?.setOnClickListener(this) + clLoadAuthorizeContainer?.setOnClickListener(this) + clAuthorizeLoading?.setOnClickListener(this) + } + + private fun readyToAuthorize() { + clErrorContainer?.visibility = View.GONE + clLoadAuthorizeContainer?.visibility = View.VISIBLE + } + + private fun showAuthorizationAgreementContent( + agreementId: Long, + agreementContent: String, + agreementTitle: String, + agreementBottom: String, + agreementLast: String) { + VoiceUtil.speak(AbsMogoApplication.getApp().applicationContext.resources.getString(R.string.module_authorize_agreement_tip), AbsMogoApplication.getApp().applicationContext, this) + this.agreementId = agreementId + clLoadAuthorizeContainer?.visibility = View.GONE + clContainer?.visibility = View.VISIBLE + tvTitle?.text = Html.fromHtml(agreementTitle) + GlobalScope.async(Dispatchers.IO) { + val spannable = Html.fromHtml(agreementContent) + withContext(Dispatchers.Main) { + tvContent?.text = spannable + } + } + tvButtonContent?.text = Html.fromHtml(agreementBottom) + tvLastContent?.text = Html.fromHtml(agreementLast) + } + + private fun showAuthorizationError() { + clLoadAuthorizeContainer?.visibility = View.GONE + clErrorContainer?.visibility = View.VISIBLE + } + + private fun voiceAuthorizeError() { + VoiceUtil.speak(AbsMogoApplication.getApp().applicationContext.getString(R.string.module_authorize_failed), AbsMogoApplication.getApp().applicationContext, this) + Logger.d(AuthorizeLayout.TAG, "onDestroy") + VoiceUtil.unregisterAll(AbsMogoApplication.getApp().applicationContext, this) + } + + override fun onClick(v: View) { + when (v.id) { + R.id.btnAuthorizeAgree -> { + AnalyticsUtil.track(AnalyticsUtil.INVOKE_TRACK_AUTHORIZE_CLICK, hashMapOf("operation_type" to 1, "operation_result" to 1)) + agreeAuthorize() + } + R.id.btnAuthorizeDisAgree -> { + AnalyticsUtil.track(AnalyticsUtil.INVOKE_TRACK_AUTHORIZE_CLICK, hashMapOf("operation_type" to 1, "operation_result" to 2)) + disAgreeAuthorize() + } + R.id.clLoadingErrorContainer, R.id.btnAuthorizeLoadingError -> { + invokeAuthorizationContent() + } + R.id.clAuthorizeTopParent -> { + Logger.i(AuthorizeLayout.TAG, "dismiss authorizeView") + authorizeController?.onDestroy() + } + } + } + + override fun onVoiceCmdAgree() { + AnalyticsUtil.track(AnalyticsUtil.INVOKE_TRACK_AUTHORIZE_CLICK, hashMapOf("operation_type" to 2, "operation_result" to 1)) + agreeAuthorize() + } + + override fun onVoiceCmdDisAgree() { + AnalyticsUtil.track(AnalyticsUtil.INVOKE_TRACK_AUTHORIZE_CLICK, hashMapOf("operation_type" to 2, "operation_result" to 2)) + disAgreeAuthorize() + } + + private fun agreeAuthorize() { + authorizeController?.agreeAuthorize(invokeTag!!, agreementId) { + voiceAuthorizeError() + } + } + + private fun disAgreeAuthorize() { + authorizeController?.disAgreeAuthorize(invokeTag!!, agreementId) { + voiceAuthorizeError() + } + } + + private fun invokeAuthorizationContent() { + authorizeController?.invokeAuthorizationContent(invokeTag!!, { + readyToAuthorize() + }, { id: Long, content: String, title: String, bottomContent: String, lastContent: String -> + showAuthorizationAgreementContent(id, content, title, bottomContent, lastContent) + }, { + showAuthorizationError() + }) + } +} \ No newline at end of file diff --git a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/layout/AuthorizeLayout.kt b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/layout/AuthorizeLayout.kt index 37248c1cb1..adc6968eb1 100644 --- a/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/layout/AuthorizeLayout.kt +++ b/modules/mogo-module-authorize/src/main/java/com/mogo/module/authorize/layout/AuthorizeLayout.kt @@ -50,11 +50,11 @@ class AuthorizeLayout(private val invokeTag: String) : View.OnClickListener, IVo return layoutInflater } - private fun getLayoutId(): Int { + fun getLayoutId(): Int { return R.layout.module_authorize_fragment } - private fun initViews(mRootView: View) { + fun initViews(mRootView: View) { Logger.d(TAG, "initView ") AnalyticsUtil.track(INVOKE_TRACK_AUTHORIZE_SHOW) init(mRootView) diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java index 330249f65d..9afad4c28c 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java @@ -16,6 +16,7 @@ class DialogImpl implements IWindowManagerView { public void init(WindowManagerView.WMViewParams params) { Logger.d("DialogImpl", "init===="); dialog = new BaseFloatDialog(params.mContext); + Logger.d("DialogImpl","params view : " + params.mContentView); dialog.setContentView(params.mContentView); } diff --git a/modules/mogo-module-common/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-common/src/main/res/values-xhdpi/dimens.xml index d56caf71d6..17412b24d7 100644 --- a/modules/mogo-module-common/src/main/res/values-xhdpi/dimens.xml +++ b/modules/mogo-module-common/src/main/res/values-xhdpi/dimens.xml @@ -1016,7 +1016,9 @@ 997px 998px 999px + 1000px 1300px + 1920px diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java index 5384a5c664..56f3d8aa44 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java @@ -115,7 +115,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme mServiceApis = ( IMogoServiceApis ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICE_APIS ).navigation(); } mServiceApis.getShareManager().resetContext(this); - mServiceApis.getAuthManagerApi().resetContext(this); + // mServiceApis.getAuthManagerApi().resetContext(this); mMogoStatusManager = mServiceApis.getStatusManagerApi(); mMogoStatusManager.setMainPageLaunchedStatus( TAG, true ); AutopilotServiceManage.getInstance().init( getContext() );