void ThunderBirdModel::HandleSleepModeEnd()
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleSleepModeEnd");
+ // 重置故事模式finished标志
+ m_storyModeFinished = false;
+
if (ThunderBirdMainView::GetInstance()) {
int currentView = ThunderBirdMainView::GetInstance()->GetCurrentView(); //获取当前视图
ln_ws_audio_deinit();//功耗优化
//直接退出到状态显示界面
AI_ForceInterrupt();
ln_ws_send_voice_chat_interrupt("退出哄睡");
+ //推送结束故事消息
+ do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_STORY_FINISH, NULL, 0);
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
} else {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView instance is null, cannot end sleep mode");
}
}
+
+ void ThunderBirdModel::HandleStoryResponseFinished(bool finished)
+ {
+ if (finished) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleStoryResponseFinished: 收到故事模式finished=true");
+ m_storyModeFinished = true;
+ }
+ }
+
+ void ThunderBirdModel::HandleDialogueResponseFinished(bool finished)
+ {
+ if (finished) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleDialogueResponseFinished: 收到对话模式finished=true");
+ m_dialogueModeFinished = true;
+ }
+ }
void ThunderBirdModel::HandleBindAndUnbind(int is_bind)
{
void ThunderBirdModel::HandleAudioPlaybackEnd()
{
//return;//确保稳定性该版本不使用音频播放结束处理
+ int currentView = ThunderBirdMainView::GetInstance()->GetCurrentView();
int currentSubView = ThunderBirdMainView::GetInstance()->GetCurrentSubView();
- if(ThunderBirdDialogueView::GetInstance() && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING)
+
+ // 检查是否是对话模式且已finished
+ if (currentView == THUNDERBIRD_DIALOGUEVIEW &&
+ currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING &&
+ m_dialogueModeFinished)
{
-
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 对话模式finished且音频播放结束,结束对话");
+ // 重置标志
+ m_dialogueModeFinished = false;
+ // 结束对话
+
ThunderBirdDialogueView::GetInstance()->AudioPlaybackEnd();
//增加30秒定时器
ThunderBirdModel::GetInstance()->StartCountUpTimer(120);
+ // ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
+ // ln_ws_end_audio_chat();//结束对话
+ // // 退出对话模式时恢复表情
+ // AI_ForceInterrupt();
+ // ln_ws_send_voice_chat_interrupt("退出对话");
+ // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
+ // ThunderBirdPresenter::GetInstance()->SetDialogueing(false);
+ // ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); // 关闭屏幕常亮
+ // ThunderBirdModel::GetInstance()->HighFrequence();//恢复视频帧率
+ // ThunderBirdModel::GetInstance()->OnExitDialogueMode();
+ return;
+ }
+
+ // 检查是否是故事模式且已finished
+ if (currentView == THUNDERBIRD_LULLABYVIEW &&
+ currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4 &&
+ m_storyModeFinished)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 故事模式finished且音频播放结束,结束故事模式");
+ // 重置标志
+ m_storyModeFinished = false;
+ // 结束故事模式
+ HandleSleepModeEnd();
+ return;
}
+
}
// 录音开始处理函数
else if (emotionStr == "speechless") return "Speechless";
else if (emotionStr == "dizzy") return "Dizzy";
else if (emotionStr == "thinking") return "Think";
- else if (emotionStr == "sleeppy") return "Sleepy";
+ else if (emotionStr == "sleepy") return "Sleepy";
+ else if (emotionStr == "sleeping") return "Sleepy";
else if (emotionStr == "working") return "WorkStudy";
else if (emotionStr == "exercising") return "Exercise";
else if (emotionStr == "playing") return "Play";
// 进入对话模式时记录当前表情
void ThunderBirdModel::OnEnterDialogueMode()
{
+ // 重置对话模式finished标志
+ m_dialogueModeFinished = false;
// 记录进入对话模式前的表情,不改变当前表情
m_dialogueExpression = m_currentExpression;
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnEnterDialogueMode: 记录进入对话模式前的表情: %s", m_currentExpression.c_str());
// 退出对话模式时恢复表情
void ThunderBirdModel::OnExitDialogueMode()
{
+ // 重置对话模式finished标志
+ m_dialogueModeFinished = false;
// 恢复到进入对话模式前记录的表情
if (!m_currentExpression.empty()) {
SetCurrentExpression(m_currentExpression);
std::string emotionFileName = MapEmotionToFileName(m_currentExpression.c_str());
expressionPath = "/user/res/video/Default/"+ emotionFileName + ".mp4";
SwitchExpressionVideo(expressionPath.c_str());
+ HandleHairIconChange(m_currentExpression);
}
else//非默认表情
{
if(access(expressionPath.c_str(), F_OK) != -1)
{
SwitchExpressionVideo(expressionPath.c_str());
+ HandleHairIconChange(m_currentExpression);
}
else
{
expressionPath.c_str(), m_currentStatusText.c_str());
}
}
-
+ //根据表情切换头发图标
+ void ThunderBirdModel::HandleHairIconChange(const std::string& expression)
+ {
+ if(expression == "sleeping")
+ {
+ ThunderBirdMainView::GetInstance()->SwitchHairIcon("/user/res/hair/hairicon/Sleeping.bin");
+ }else if(expression == "angry")
+ {
+ ThunderBirdMainView::GetInstance()->SwitchHairIcon("/user/res/hair/hairicon/Angry.bin");
+ }else if(expression == "confused")
+ {
+ ThunderBirdMainView::GetInstance()->SwitchHairIcon("/user/res/hair/hairicon/Confused.bin");
+ }else if(expression == "shocked")
+ {
+ ThunderBirdMainView::GetInstance()->SwitchHairIcon("/user/res/hair/hairicon/Shocked.bin");
+ }else if(expression == "speechless")
+ {
+ ThunderBirdMainView::GetInstance()->SwitchHairIcon("/user/res/hair/hairicon/Speechless.bin");
+ }
+ else
+ {
+ ThunderBirdMainView::GetInstance()->StopHairIcon();//默认不显示头发图标
+ }
+ }
// 获取当前表情状态
std::string ThunderBirdModel::GetCurrentExpression() const
{