diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index b77aa4cede..6e680df8e7 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -78,7 +78,7 @@ public class MogoApplication extends AbsMogoApplication { MogoModulePaths.addModule( new MogoModule( TanluApiConst.MODULE_PATH, TanluApiConst.MODULE_NAME ) ); MogoModulePaths.addBaseModule( new MogoModule( TanluConstants.TAG, TanluConstants.MODEL_NAME ) ); - MogoModulePaths.addBaseModule( new MogoModule( MogoServicePaths.PATH_SHARE, "ShareControl" ) ); + MogoModulePaths.addModule( new MogoModule( MogoServicePaths.PATH_SHARE, "ShareControl" ) ); MogoModulePaths.addModule( new MogoModule( LeftPanelConst.PATH_NAME, LeftPanelConst.MODULE_NAME ) ); @@ -88,6 +88,8 @@ public class MogoApplication extends AbsMogoApplication { MogoModulePaths.addBaseModule( new MogoModule( MogoServicePaths.PATH_MOGO_MONITOR, "MogoMonitor" ) ); MogoModulePaths.addModule( new MogoModule( PushUIConstants.PATH, PushUIConstants.NAME ) ); + MogoModulePaths.addBaseModule(new MogoModule(MogoServicePaths.PATH_GLOBAL_UNWAKE,"GlobalUnwake")); + if ( !DebugConfig.isLauncher() ) { PersistentManager.getInstance().initManager( this ); Intent intent = new Intent( this, MogoMainService.class ); diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java index 81d435746f..afe5deee67 100644 --- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java +++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/SchemeIntent.java @@ -37,6 +37,8 @@ public class SchemeIntent implements IMogoStatusChangedListener { public static final String TYPE_SHOW_ONLINE_CAR_PANEL = "showOnlineCarPanel"; + public static final String TYPE_SHOW_SHARE_PANEL = "showSharePanel"; + private IMogoServiceApis mApis; private Context mContext; @@ -150,6 +152,9 @@ public class SchemeIntent implements IMogoStatusChangedListener { break; case TYPE_SHOW_ONLINE_CAR_PANEL: handleShowOnlineCarPanel( target ); + case TYPE_SHOW_SHARE_PANEL: + handleShowSharePanel(); + break; default: break; @@ -199,6 +204,11 @@ public class SchemeIntent implements IMogoStatusChangedListener { mApis.getOnlineCarPanelApi().showPanel(); } + private void handleShowSharePanel() { + Logger.d(TAG, "handleShowSharePanel"); + // todo 跳转到热心指数 + } + @Override public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) { if ( descriptor == StatusDescriptor.MAIN_PAGE_RESUME ) { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/unwake/GlobalUnwakeConst.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/unwake/GlobalUnwakeConst.java new file mode 100644 index 0000000000..fd85c4e3f7 --- /dev/null +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/unwake/GlobalUnwakeConst.java @@ -0,0 +1,47 @@ +package com.mogo.module.service.unwake; + +/** + * 全局免唤醒常量类 + * + * @author tongchenfei + */ +public class GlobalUnwakeConst { + public static final String MODULE_NAME = "GlobalUnwakeManager"; + + // command + public static final String VOICE_CMD_GO_TO_SHARE = "com.zhidao.share"; + /** + * 这个是实时路况,不是拥堵,拥堵放在了extention模块里面处理 + */ + public static final String VOICE_CMD_PUB_ROAD_CONDITION = "com.zhidao.pathfinder.report.roadCondition"; + /** + * 故障求助 + */ + public static final String VOICE_CMD_PUB_TROUBLE_HELP = "com.zhidao.auxiliaryDriving" + + ".pubTroubleHelp"; + /** + * 关闭分享框 唤醒 + */ + public static final String VOICE_CMD_SHARE_DIALOG_CLOSE = "com.zhidao.share.close"; + /** + * 两次未回复关闭分享对话框 + */ + public static final String VOICE_CMD_NO_REPLY_SHARE_DIALOG_CLOSE = "com.zhidao.share.dialog" + + ".close"; + /** + * 免唤醒词上报拥堵,但是现在当唤醒词使用 + */ + public static final String UNWAKE_UPLOAD_ROAD_CONDITION = "command_upload_roadcondition"; + /** + * 免唤醒词上报实时路况 + */ + public static final String UNWAKE_UPLOAD_REAL_TIME_TRAFFIC = "command_upload_real_time_traffic"; + + /** + * 唤醒词查询热心指数 + */ + public static final String VOICE_QUERY_HEART_INDEX = "com.zhidao.query.myshare.index"; + + // 词 + public static final String[] UPLOAD_REAL_TIME_TRAFFIC = {"上报实时路况", "上报路况"}; +} diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/unwake/GlobalUnwakeManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/unwake/GlobalUnwakeManager.java new file mode 100644 index 0000000000..e98f703a5a --- /dev/null +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/unwake/GlobalUnwakeManager.java @@ -0,0 +1,87 @@ +package com.mogo.module.service.unwake; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.alibaba.android.arouter.facade.template.IProvider; +import com.mogo.commons.voice.AIAssist; +import com.mogo.commons.voice.IMogoVoiceCmdCallBack; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.service.MogoServicePaths; +import com.mogo.service.intent.IMogoIntentListener; +import com.mogo.service.intent.IMogoIntentManager; +import com.mogo.utils.logger.Logger; + +import static com.mogo.module.service.unwake.GlobalUnwakeConst.UNWAKE_UPLOAD_REAL_TIME_TRAFFIC; +import static com.mogo.module.service.unwake.GlobalUnwakeConst.UNWAKE_UPLOAD_ROAD_CONDITION; +import static com.mogo.module.service.unwake.GlobalUnwakeConst.UPLOAD_REAL_TIME_TRAFFIC; +import static com.mogo.module.service.unwake.GlobalUnwakeConst.VOICE_CMD_GO_TO_SHARE; +import static com.mogo.module.service.unwake.GlobalUnwakeConst.VOICE_CMD_NO_REPLY_SHARE_DIALOG_CLOSE; +import static com.mogo.module.service.unwake.GlobalUnwakeConst.VOICE_CMD_PUB_ROAD_CONDITION; +import static com.mogo.module.service.unwake.GlobalUnwakeConst.VOICE_CMD_PUB_TROUBLE_HELP; +import static com.mogo.module.service.unwake.GlobalUnwakeConst.VOICE_CMD_SHARE_DIALOG_CLOSE; +import static com.mogo.module.service.unwake.GlobalUnwakeConst.VOICE_QUERY_HEART_INDEX; + +/** + * 全局免唤醒管理 + * 包括唤醒词指令和全局免唤醒词指令 + * 有几个Module仅仅是因为要注册全局免唤醒词,加到了BaseModule中,为了将这部分Module从BaseModule中去掉,特抽离全局免唤醒词注册监听逻辑 + * + * @author tongchenfei + */ +@Route(path = MogoServicePaths.PATH_GLOBAL_UNWAKE) +public class GlobalUnwakeManager implements IProvider, IMogoIntentListener, IMogoVoiceCmdCallBack { + private IMogoIntentManager intentManager; + private Context context; + private static final String TAG = "GlobalUnwakeManager"; + @Override + public void init(Context context) { + Logger.d(TAG, "全局免唤醒模块初始化===="); + intentManager = MogoApisHandler.getInstance().getApis().getIntentManagerApi(); + intentManager.registerIntentListener(VOICE_CMD_GO_TO_SHARE, this); + intentManager.registerIntentListener(VOICE_CMD_PUB_TROUBLE_HELP, this); + intentManager.registerIntentListener(VOICE_CMD_PUB_ROAD_CONDITION, this); + intentManager.registerIntentListener(VOICE_CMD_SHARE_DIALOG_CLOSE, this); + intentManager.registerIntentListener(VOICE_CMD_NO_REPLY_SHARE_DIALOG_CLOSE, this); + intentManager.registerIntentListener(UNWAKE_UPLOAD_ROAD_CONDITION, this); + + // 免唤醒词注册,全局免唤醒 + AIAssist.getInstance(context).registerUnWakeupCommand(UNWAKE_UPLOAD_REAL_TIME_TRAFFIC, + UPLOAD_REAL_TIME_TRAFFIC, this); + } + + @Override + public void onIntentReceived(String intentStr, Intent intent) { + // 此处只接受处理语音相关广播 + Logger.d(TAG, "收到唤醒词指令: " + intentStr); + switch (intentStr) { + // 分享相关唤醒词 + case VOICE_CMD_GO_TO_SHARE: + case VOICE_CMD_PUB_TROUBLE_HELP: + case VOICE_CMD_PUB_ROAD_CONDITION: + case VOICE_CMD_SHARE_DIALOG_CLOSE: + case VOICE_CMD_NO_REPLY_SHARE_DIALOG_CLOSE: + case UNWAKE_UPLOAD_ROAD_CONDITION: + MogoApisHandler.getInstance().getApis().getShareManager().onGlobalUnwake(intentStr, intent); + break; + case VOICE_QUERY_HEART_INDEX: + Intent start = new Intent( Intent.ACTION_VIEW ); + start.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); + start.setData( Uri.parse( "mogo://launcher/main/switch2?type=showSharePanel" ) ); + context.startActivity( start ); + break; + default: + break; + } + } + + @Override + public void onCmdSelected(String cmd) { + Logger.d(TAG, "收到免唤醒词指令: " + cmd); + if (UNWAKE_UPLOAD_REAL_TIME_TRAFFIC.equals(cmd)) { + MogoApisHandler.getInstance().getApis().getShareManager().onGlobalUnwake(cmd, null); + } + } +} 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 a05c8b67e9..2b98266a01 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 @@ -97,8 +97,7 @@ import static com.mogo.service.share.IMogoTanluProvider.TYPE_TRAFFIC_CHECK; * @since 2020-01-10 */ @Route(path = MogoServicePaths.PATH_SHARE) -public class ShareControl implements IMogoShareManager, IMogoIntentListener, - IMogoVoiceCmdCallBack, Handler.Callback { +public class ShareControl implements IMogoShareManager, Handler.Callback { private static final String TAG = "ShareControl"; private Context mContext; @@ -107,7 +106,6 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, private BaseFloatDialog mShareDialog; private IMogoAuthorizeModuleManager authorizeModuleManager; - private IMogoIntentManager intentManager; @Override public void showShareDialog() { @@ -197,18 +195,6 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, TipToast.tip("未授权,无法分享"); } }); - intentManager = ServiceApisManager.serviceApis.getIntentManagerApi(); - intentManager.registerIntentListener(VOICE_CMD_GO_TO_SHARE, this); - intentManager.registerIntentListener(VOICE_CMD_PUB_TROUBLE_HELP, this); - intentManager.registerIntentListener(VOICE_CMD_PUB_ROAD_CONDITION, this); - intentManager.registerIntentListener(VOICE_CMD_SHARE_DIALOG_CLOSE, this); - intentManager.registerIntentListener(VOICE_CMD_NO_REPLY_SHARE_DIALOG_CLOSE, this); - intentManager.registerIntentListener(UNWAKE_UPLOAD_ROAD_CONDITION, this); - - // 免唤醒词注册,全局免唤醒 - AIAssist.getInstance(mContext).registerUnWakeupCommand(UNWAKE_UPLOAD_REAL_TIME_TRAFFIC, - UPLOAD_REAL_TIME_TRAFFIC, ShareControl.this); - // if (!DebugConfig.isLauncher()) { ServiceApisManager.serviceApis.getStatusManagerApi().registerStatusChangedListener(TAG, StatusDescriptor.MAIN_PAGE_RESUME, new IMogoStatusChangedListener() { @@ -241,94 +227,83 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, } @Override - public void onCmdSelected(String cmd) { - Logger.d(TAG, "收到免唤醒词指令: " + cmd); - switch (cmd) { - case UNWAKE_CANCEL_SHARE: - dismissShareDialog(); - break; - case UNWAKE_UPLOAD_ROAD_BLOCK: - if (needAuth()) { - goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_BLOCK, false); - } else { - uploadFromVoice(TYPE_BLOCK); - } - break; - case UNWAKE_UPLOAD_TRAFFIC_CHECK: - if (needAuth()) { - goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_TRAFFIC_CHECK, false); - } else { - uploadFromVoice(TYPE_TRAFFIC_CHECK); - } - break; - case UNWAKE_UPLOAD_ROAD_CLOSURE: - if (needAuth()) { - goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_CLOSURE, false); - } else { - uploadFromVoice(TYPE_CLOSURE); - } - break; - case UNWAKE_UPLOAD_ACCIDENT: - if (needAuth()) { - goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_ACCIDENT, false); - } else { - uploadFromVoice(TYPE_ACCIDENT); - } - break; - case UNWAKE_UPLOAD_REAL_TIME_TRAFFIC: - if (needAuth()) { - goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_REAL_TIME_TRAFFIC, false); - } else { - uploadFromVoice(TYPE_REAL_TIME_TRAFFIC); - } - break; - case UNWAKE_UPLOAD_SEEK_HELP: - if (needAuth()) { - goAuth(STEP_AFTER_AUTH_TYPE_SEEK_HELP, TYPE_BLOCK, false); - } else { - seekHelp(); - } - - break; - case UNWAKE_UPLOAD_STAGNANT_WATER: - if (needAuth()) { - goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_STAGNANT_WATER, false); - } else { - uploadFromVoice(TYPE_STAGNANT_WATER); - } - break; - case UNWAKE_UPLOAD_ROAD_ICY: - if (needAuth()) { - goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_ROAD_ICY, false); - } else { - uploadFromVoice(TYPE_ROAD_ICY); - } - break; - case UNWAKE_UPLOAD_DENSE_FOG: - if (needAuth()) { - goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_DENSE_FOG, false); - } else { - uploadFromVoice(TYPE_DENSE_FOG); - } - break; - case UNWAKE_UPLOAD_ROAD_CONSTRUCTION: - if (needAuth()) { - goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_ROAD_CONSTRUCTION, false); - } else { - uploadFromVoice(TYPE_ROAD_CONSTRUCTION); - } - break; - default: - break; - } - } - - @Override - public void onIntentReceived(String intentStr, Intent intent) { - // 此处只接受处理语音相关广播 - Logger.d(TAG, "收到唤醒词指令: " + intentStr); + public void onGlobalUnwake(String cmd, Intent intent) { try { - switch (intentStr) { + switch (cmd) { + case UNWAKE_CANCEL_SHARE: + dismissShareDialog(); + break; + case UNWAKE_UPLOAD_ROAD_BLOCK: + if (needAuth()) { + goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_BLOCK, false); + } else { + uploadFromVoice(TYPE_BLOCK); + } + break; + case UNWAKE_UPLOAD_TRAFFIC_CHECK: + if (needAuth()) { + goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_TRAFFIC_CHECK, false); + } else { + uploadFromVoice(TYPE_TRAFFIC_CHECK); + } + break; + case UNWAKE_UPLOAD_ROAD_CLOSURE: + if (needAuth()) { + goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_CLOSURE, false); + } else { + uploadFromVoice(TYPE_CLOSURE); + } + break; + case UNWAKE_UPLOAD_ACCIDENT: + if (needAuth()) { + goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_ACCIDENT, false); + } else { + uploadFromVoice(TYPE_ACCIDENT); + } + break; + case UNWAKE_UPLOAD_REAL_TIME_TRAFFIC: + if (needAuth()) { + goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_REAL_TIME_TRAFFIC, false); + } else { + uploadFromVoice(TYPE_REAL_TIME_TRAFFIC); + } + break; + case UNWAKE_UPLOAD_SEEK_HELP: + if (needAuth()) { + goAuth(STEP_AFTER_AUTH_TYPE_SEEK_HELP, TYPE_BLOCK, false); + } else { + seekHelp(); + } + + break; + case UNWAKE_UPLOAD_STAGNANT_WATER: + if (needAuth()) { + goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_STAGNANT_WATER, false); + } else { + uploadFromVoice(TYPE_STAGNANT_WATER); + } + break; + case UNWAKE_UPLOAD_ROAD_ICY: + if (needAuth()) { + goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_ROAD_ICY, false); + } else { + uploadFromVoice(TYPE_ROAD_ICY); + } + break; + case UNWAKE_UPLOAD_DENSE_FOG: + if (needAuth()) { + goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_DENSE_FOG, false); + } else { + uploadFromVoice(TYPE_DENSE_FOG); + } + break; + case UNWAKE_UPLOAD_ROAD_CONSTRUCTION: + if (needAuth()) { + goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_ROAD_CONSTRUCTION, false); + } else { + uploadFromVoice(TYPE_ROAD_CONSTRUCTION); + } + break; case VOICE_CMD_PUB_TROUBLE_HELP: if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_SEEK_HELP, TYPE_DENSE_FOG, false); @@ -444,7 +419,8 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, break; } } catch (Exception e) { - Logger.e(TAG, e, "ShareControl exception"); + Logger.e(TAG, e, "onGlobalUnwake exception"); + e.printStackTrace(); } } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java index bca6a29631..4cb53099a2 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java @@ -260,4 +260,9 @@ public class MogoServicePaths { * 在线好友面板 */ public static final String PATH_ONLINE_CAR_PANEL = "/onlinecar/panel"; + + /** + * 全局免唤醒 + */ + public static final String PATH_GLOBAL_UNWAKE = "/global/unwake"; } diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/share/IMogoShareManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/share/IMogoShareManager.java index ca0285449c..6ec41a931a 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/share/IMogoShareManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/share/IMogoShareManager.java @@ -4,12 +4,13 @@ import android.content.Context; import com.alibaba.android.arouter.facade.template.IProvider; import com.mogo.service.module.IMogoModuleProvider; +import com.mogo.service.voice.IMogoGlobalVoiceManager; /** * 分享框管理接口 * @author tongchenfei */ -public interface IMogoShareManager extends IProvider { +public interface IMogoShareManager extends IProvider, IMogoGlobalVoiceManager { /** * 显示分享框 */ diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/voice/IMogoGlobalVoiceManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/voice/IMogoGlobalVoiceManager.java new file mode 100644 index 0000000000..b16230830c --- /dev/null +++ b/services/mogo-service-api/src/main/java/com/mogo/service/voice/IMogoGlobalVoiceManager.java @@ -0,0 +1,16 @@ +package com.mogo.service.voice; + +import android.content.Intent; + +/** + * 全局免唤醒指令处理监听 + * + * @author tongchenfei + */ +public interface IMogoGlobalVoiceManager { + /** + * 收到全局免唤醒指令和唤醒词指令 + * @param cmd 具体指令 + */ + void onGlobalUnwake(String cmd, Intent intent); +}