diff --git a/modules/mogo-module-share/build.gradle b/modules/mogo-module-share/build.gradle index e355181036..5a6e9d9be2 100644 --- a/modules/mogo-module-share/build.gradle +++ b/modules/mogo-module-share/build.gradle @@ -46,10 +46,12 @@ dependencies { implementation rootProject.ext.dependencies.mogoutils implementation rootProject.ext.dependencies.mogocommons implementation rootProject.ext.dependencies.modulecommon + implementation rootProject.ext.dependencies.mogomoduleauth } else { implementation project(":foudations:mogo-utils") api project(":foudations:mogo-commons") implementation project(':modules:mogo-module-common') + implementation project(':modules:mogo-module-authorize') } } diff --git a/modules/mogo-module-share/src/main/AndroidManifest.xml b/modules/mogo-module-share/src/main/AndroidManifest.xml index 8ca40a6422..d170d3f9cd 100644 --- a/modules/mogo-module-share/src/main/AndroidManifest.xml +++ b/modules/mogo-module-share/src/main/AndroidManifest.xml @@ -2,10 +2,5 @@ package="com.mogo.module.share" > - - - - - diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java index a5b5aba610..c05b188587 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java @@ -1,31 +1,66 @@ package com.mogo.module.share; import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.android.arouter.launcher.ARouter; +import com.mogo.module.authorize.authprovider.invoke.AuthorizeConstant; +import com.mogo.module.authorize.authprovider.invoke.AuthorizeInvokerConstant; +import com.mogo.module.authorize.authprovider.invoke.IMogoAuthorizeContentListener; +import com.mogo.module.authorize.authprovider.module.IMogoAcquireAuthorizeListener; +import com.mogo.module.authorize.authprovider.module.IMogoAuthorizeModuleManager; +import com.mogo.module.authorize.model.bean.Agreement; +import com.mogo.module.share.constant.ShareConstants; import com.mogo.module.share.dialog.LaucherShareDialog; import com.mogo.module.share.manager.ServiceApisManager; +import com.mogo.module.share.manager.UploadHelper; import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; +import com.mogo.service.intent.IMogoIntentListener; +import com.mogo.service.intent.IMogoIntentManager; import com.mogo.service.share.IMogoShareManager; +import com.mogo.utils.TipToast; import com.mogo.utils.logger.Logger; +import org.jetbrains.annotations.NotNull; +import org.json.JSONException; +import org.json.JSONObject; + +import static com.mogo.module.share.constant.ShareConstants.TYPE_ACCIDENT; +import static com.mogo.module.share.constant.ShareConstants.TYPE_DENSE_FOG; +import static com.mogo.module.share.constant.ShareConstants.TYPE_REAL_TIME_TRAFFIC; +import static com.mogo.module.share.constant.ShareConstants.TYPE_ROAD_CONSTRUCTION; +import static com.mogo.module.share.constant.ShareConstants.TYPE_ROAD_ICY; +import static com.mogo.module.share.constant.ShareConstants.TYPE_STAGNANT_WATER; +import static com.mogo.module.share.constant.ShareConstants.VOICE_CMD_GO_TO_SHARE; +import static com.mogo.module.share.constant.ShareConstants.VOICE_CMD_PUB_ROAD_CONDITION; +import static com.mogo.module.share.constant.ShareConstants.VOICE_CMD_PUB_TROUBLE_HELP; + /** + * 分享框的逻辑都放到这里吧 + * * @author lixiaopeng * @description 分享弹框接口 * @since 2020-01-10 */ @Route(path = MogoServicePaths.PATH_SHARE) public class ShareControl implements IMogoShareManager { + private static final String TAG = "ShareControl"; private Context mContext; private LaucherShareDialog mShareDialog; + private IMogoAuthorizeModuleManager authorizeModuleManager; + @Override public void showShareDialog() { - mShareDialog = new LaucherShareDialog(mContext); - mShareDialog.show(); + if (authorizeModuleManager.needAuthorize(AuthorizeInvokerConstant.AUTHORIZE_TYPE_LAUNCHER_SHARE)) { + authorizeModuleManager.invokeAuthorization(AuthorizeInvokerConstant.AUTHORIZE_TYPE_LAUNCHER_SHARE); + }else{ + realShowDialog(); + } } @Override @@ -35,9 +70,104 @@ public class ShareControl implements IMogoShareManager { } } + private void realShowDialog(){ + if (mShareDialog == null) { + mShareDialog = new LaucherShareDialog(mContext); + } + mShareDialog.show(); + } + @Override public void init(Context context) { mContext = context; ServiceApisManager.INSTANCE.init(context); + authorizeModuleManager = + (IMogoAuthorizeModuleManager) ARouter.getInstance().build(AuthorizeConstant.PROVIDER_MODULE).navigation(context); + authorizeModuleManager.registerAuthorizeListener(AuthorizeInvokerConstant.AUTHORIZE_TYPE_LAUNCHER_SHARE, new IMogoAcquireAuthorizeListener() { + @Override + public void authorizeSuccess() { + realShowDialog(); + } + + @Override + public void authorizeFailed(@NotNull String errorMsg) { + TipToast.tip("未授权,无法分享"); + } + + @Override + public void forbiddenVoiceWhenAuthorize(@NotNull String cmd) { + TipToast.tip("未授权,无法分享"); + } + }); + ServiceApisManager.serviceApis.getIntentManagerApi().registerIntentListener("ShareDialog", new IMogoIntentListener() { + @Override + public void onIntentReceived(String intentStr, Intent intent) { + // 此处只接受处理语音相关广播 + String command = intent.getStringExtra("command"); + Logger.d(TAG, "收到唤醒词指令: " + command); + try { + switch (command) { + case VOICE_CMD_PUB_TROUBLE_HELP: { + // 开启服务,准备上报求助 + Intent seekHelp = new Intent(mContext, VoiceCmdService.class); + seekHelp.putExtra(ShareConstants.VOICE_CMD_SERVICE_EVENT_KEY, + ShareConstants.VOICE_CMD_SERVICE_SEEK_HELP); + mContext.startService(seekHelp); + dismissShareDialog(); + break; + } + case VOICE_CMD_GO_TO_SHARE: { + String ob = new JSONObject(intent.getStringExtra("data")).opt("ob").toString(); + Logger.d(TAG, "ob: $ob"); + switch (ob) { + case "积水": { + UploadHelper.INSTANCE.upload(mContext, TYPE_STAGNANT_WATER); + dismissShareDialog(); + break; + } + case "积冰": { + UploadHelper.INSTANCE.upload(mContext, TYPE_ROAD_ICY); + dismissShareDialog(); + break; + } + case "雾": { + UploadHelper.INSTANCE.upload(mContext, TYPE_DENSE_FOG); + dismissShareDialog(); + break; + } + case "交通事故": { + UploadHelper.INSTANCE.upload(mContext, TYPE_ACCIDENT); + dismissShareDialog(); + break; + } + case "施工": { + UploadHelper.INSTANCE.upload(mContext, TYPE_ROAD_CONSTRUCTION); + dismissShareDialog(); + break; + } + default: + break; + } + } + case VOICE_CMD_PUB_ROAD_CONDITION: { + String ob = + new JSONObject(intent.getStringExtra("data")).opt("obj").toString(); + Logger.d(TAG, "ob:" + ob); + if ("路况".equals(ob)) { + // 上报实时路况 + Logger.d(TAG, "分享框准备触发上报实时路况"); + UploadHelper.INSTANCE.upload(mContext, TYPE_REAL_TIME_TRAFFIC); + dismissShareDialog(); + break; + } + } + default: + break; + } + } catch (Exception e) { + Logger.e(TAG, e, "ShareControl exception"); + } + } + }); } } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt deleted file mode 100644 index b8695ceb5d..0000000000 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareVoiceCmdReceiver.kt +++ /dev/null @@ -1,75 +0,0 @@ -package com.mogo.module.share - -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import com.mogo.module.share.constant.ShareConstants -import com.mogo.module.share.constant.ShareConstants.* -import com.mogo.module.share.manager.ServiceApisManager -import com.mogo.module.share.manager.UploadHelper -import com.mogo.utils.logger.Logger -import org.json.JSONObject - -/** - * 用于接收唤醒词指令,现在只接收 com.zhidao.speech.awake.notify 这一条广播 - */ -class ShareVoiceCmdReceiver : BroadcastReceiver() { - private val TAG = "ShareVoiceCmdReceiver" - override fun onReceive(context: Context, intent: Intent) { - // 接收唤醒词指令 - val command = intent.getStringExtra("command")?:"" - Logger.d(TAG, "收到唤醒词指令: $command") - when (command) { - VOICE_CMD_PUB_TROUBLE_HELP -> { - // 开启服务,准备上报求助 - val seekHelp = Intent(context, VoiceCmdService::class.java) - seekHelp.putExtra(ShareConstants.VOICE_CMD_SERVICE_EVENT_KEY, ShareConstants.VOICE_CMD_SERVICE_SEEK_HELP) - context.startService(seekHelp) - ServiceApisManager.serviceApis.shareManager.dismissShareDialog() -// ShareControl.getInstance(context).dismissDialog() - } - VOICE_CMD_GO_TO_SHARE ->{ - val ob = JSONObject(intent.getStringExtra("data") ?: "").opt("ob") - Logger.d(TAG, "ob: $ob") - when (ob) { - "积水"->{ - UploadHelper.upload(context, TYPE_STAGNANT_WATER) - ServiceApisManager.serviceApis.shareManager.dismissShareDialog() -// ShareControl.getInstance(context).dismissDialog() - } - "积冰"->{ - UploadHelper.upload(context, TYPE_ROAD_ICY) - ServiceApisManager.serviceApis.shareManager.dismissShareDialog() -// ShareControl.getInstance(context).dismissDialog() - } - "雾"->{ - UploadHelper.upload(context, TYPE_DENSE_FOG) - ServiceApisManager.serviceApis.shareManager.dismissShareDialog() -// ShareControl.getInstance(context).dismissDialog() - } - "交通事故"->{ - UploadHelper.upload(context, TYPE_ACCIDENT) - ServiceApisManager.serviceApis.shareManager.dismissShareDialog() -// ShareControl.getInstance(context).dismissDialog() - } - "施工"->{ - UploadHelper.upload(context, TYPE_ROAD_CONSTRUCTION) - ServiceApisManager.serviceApis.shareManager.dismissShareDialog() -// ShareControl.getInstance(context).dismissDialog() - } - } - } - VOICE_CMD_PUB_ROAD_CONDITION->{ - val ob = JSONObject(intent.getStringExtra("data") ?: "").opt("obj") - Logger.d(TAG, "ob: $ob") - if(ob == "路况") { - // 上报实时路况 - Logger.d(TAG, "分享框准备触发上报实时路况") - UploadHelper.upload(context, TYPE_REAL_TIME_TRAFFIC) - ServiceApisManager.serviceApis.shareManager.dismissShareDialog() -// ShareControl.getInstance(context).dismissDialog() - } - } - } - } -} \ No newline at end of file