/* * Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved. * Description: voice assistant * Author: CompanyName * Create: 2022-01-18 */ #include "PhoneService.h" // #include "MainViewSample.h" // #include "TjdUiAppVocassist.h" #include "TjdUiAppVocassistModel.h" #include "TjdUiAppIds.h" #include "NativeAbility.h" #include "graphic_service.h" #include "sys_config.h" #define ENABLE_PRINT_INFO 1 #if ENABLE_PRINT_INFO #define static_print_info(...) sys_ui_log_i(__VA_ARGS__) // 一般信息打印宏控制 #define static_print_warn(...) sys_ui_log_w(__VA_ARGS__) // 警告信息打印一般常开 #define static_print_error(...) sys_ui_log_e(__VA_ARGS__) // 错误信息打印一般常开 #define static_print_debug(...) sys_ui_log_d(__VA_ARGS__) // 调试信息打印 #else #define static_print_info(...) #define static_print_warn(...) #define static_print_error(...) #define static_print_debug(...) #endif #ifdef __cplusplus extern "C" { #endif static constexpr int CMD_LENGTH = 20; static const char g_voiceWordName[SMART_VOICE_INVALID_CMD_ID + 1][CMD_LENGTH] = { "接听电话", "挂断电话", "上一首", "下一首", "调大音量", "调小音量", "播放音乐", "停止播放", "继续播放", "打开锻炼", "打开短信", "打开闹钟", "支付宝支付", "微信支付" }; #ifdef __cplusplus } #endif using namespace OHOS; namespace TJD { static void RecognVoiceEvent(const SmartVoiceCmdParam data) { SmartVoiceCmdParam *param = nullptr; param = (SmartVoiceCmdParam *)&data; if (param->cmdId < 0 || param->cmdId > SMART_VOICE_INVALID_CMD_ID) { static_print_info("Get cmdid failed, funct callback finish!!"); return; } if (TjdUiVocassistModel::GetInstance()->GetPhoneDetailStatus() == ONE_OR_MORE_ROAD_AND_OTHER_STATUS) { static_print_info("Phone is active, voc assistance can not open!!"); return; } static_print_info("[VoiceAssistModel] RecognVoiceEvent, cmdid = %d", param->cmdId); if (NativeAbility::GetInstance().GetCurSliceId() != TJD_APP_VIEW_VOICE_ASSISTANT) { // 其他界面切换到语音助手界面 static_print_info("[VoiceAssistModel] CurSliceId does not equal TJD_APP_VIEW_VOICE_ASSISTANT"); if (strcmp(g_voiceWordName[param->cmdId], "小艺小艺") == 0) { static_print_info("Current view is not offlineassist"); NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_VOICE_ASSISTANT); } } else if (NativeAbility::GetInstance().GetCurSliceId() == TJD_APP_VIEW_VOICE_ASSISTANT) { // 已经进入语音助手 if (TjdVoiceAssistance::GetInstance() == nullptr) { static_print_info("VoiceAssistance instance is nullptr, funct callback finish!!"); return; } if (!TjdUiVocassistModel::GetInstance()->GetHasOneCmd()) { static_print_info("CurSliceId equals TJD_APP_VIEW_VOICE_ASSISTANT"); // TjdVoiceAssistance::GetInstance()->SetCmdContext(g_voiceWordName[param->cmdId]); TjdVoiceAssistance::GetInstance()->SwitchMedium(param->cmdId); TjdUiVocassistModel::GetInstance()->SetHasOneCmd(true); // TjdUiVocassistModel::GetInstance()->SetRegFlag(param->cmdId); // TjdUiVocassistModel::GetInstance()->SetExitStatus(CONTINUTE_EXIT_MODE2); // TjdVoiceAssistance::GetInstance()->DelayDisplayTime(500); // 500ms } } } void TJDVoiceFunction(SmartVoiceEventType type, td_void *data, td_s32 size) { int dataSize = sizeof(SmartVoiceCmdParam); if (data == nullptr || dataSize != size) { return; } switch (type) { case SMART_VOICE_EVENT_VOICE_BEGIN: break; case SMART_VOICE_EVENT_VOICE_END: break; case SMART_VOICE_EVENT_VOICE_COMMAND: { GraphicService::GetInstance()->PostGraphicEvent(std::bind(RecognVoiceEvent, *(SmartVoiceCmdParam *)data)); break; } default: break; } } TjdUiVocassistModel::TjdUiVocassistModel() { static_print_info( "[VoiceAssistModel] TjdUiVocassistModel"); } TjdUiVocassistModel::~TjdUiVocassistModel() { static_print_info("[VoiceAssistModel] ~TjdUiVocassistModel"); } TjdUiVocassistModel *TjdUiVocassistModel::GetInstance() { static TjdUiVocassistModel vocassistModel; return &vocassistModel; } void TjdUiVocassistModel::Init() { static_print_info("[VoiceAssistModel] Init"); LocalAsrInitParams asrpara; asrpara.powerMode = ALWAYS_WAKE; asrpara.inputMode = INNER_AUDIO_PORT; asrpara.enableAEC = DISABLE; asrpara.enableNpu = DISABLE; LocalAsrInit(&asrpara); LocalAsrSetCallback(TJDVoiceFunction); } void TjdUiVocassistModel::UnInit() { static_print_info("[VoiceAssistModel] UnInit"); } int TjdUiVocassistModel::GetPhoneDetailStatus() // 设置来电时的状态 { int curCallNum = GetCurrCallNum(); int curCallState = GetCurrCallState(); if (curCallNum != 0) { if (curCallNum == 1 && curCallState == HFP_HF_CALL_STATE_INCOMING) { return ONE_ROAD_AND_INCOMING; } else { return ONE_OR_MORE_ROAD_AND_OTHER_STATUS; } } else { return OTHER_STATUS; } } // int TjdUiVocassistModel::GetToggleFlag() // { // return toggleFg; // } // void TjdUiVocassistModel::SetToggleFlag(int val) // { // toggleFg = val; // } int TjdUiVocassistModel::GetRegFlag() { return regFlag; } void TjdUiVocassistModel::SetRegFlag(int val) { regFlag = val; } // int TjdUiVocassistModel::GetExitStatus() // { // return exitStatus; // } // void TjdUiVocassistModel::SetExitStatus(int val) // { // exitStatus = val; // } // int TjdUiVocassistModel::GetConnectFlag() // { // return imgConnectFlag; // } // void TjdUiVocassistModel::SetConnectFlag(int flag) // { // imgConnectFlag = flag; // } bool TjdUiVocassistModel::GetHasOneCmd() { return hasOneCmd; } void TjdUiVocassistModel::SetHasOneCmd(bool fg) { hasOneCmd = fg; } }