// ai_media_play_stop();
ThunderBirdDialogueView::GetInstance()->DialogueFirst = true;
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdPresenter::HandleFuncKeyLongPress: Stopped AI audio playback");
+
+ // 等待视频切换完成,避免在视频切换过程中退出导致资源冲突
+ if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::IsSwitchingVideo()) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdPresenter::HandleFuncKeyLongPress: 等待视频切换完成");
+ ThunderBirdMainView::WaitForVideoSwitchComplete(2000);
+ }
+
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);
isDialogueing = false;
ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); // 关闭屏幕常亮
- // DialogueingFlag = false;
+ ThunderBirdModel::GetInstance()->HighFrequence();//恢复视频帧率
+
+ // 如果从STATUS_SHOW退出,ChangeView不会触发退出逻辑(因为条件不满足),需要手动调用
+ // 如果从LISTENING或SPEAKING退出,ChangeView会处理退出逻辑,这里不需要重复调用
+ bool needManualExit = (currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
// 检查绑定状态,如果未绑定则跳转到 THUNDERBIRD_GUIDEVIEW_5
if (!ThunderBirdModel::GetInstance()->getbind_status()) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "设备未绑定,跳转到 THUNDERBIRD_GUIDEVIEW_5");
+ if (needManualExit) {
+ ThunderBirdModel::GetInstance()->OnExitDialogueMode();
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
+ }
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_GUIDEVIEW, ThunderBirdGuideView::THUNDERBIRD_GUIDEVIEW_5);
} else {
+ if (needManualExit) {
+ ThunderBirdModel::GetInstance()->OnExitDialogueMode();
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
+ }
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
}
+
+ // 隐藏提醒视图
if(ThunderBirdReminderView::GetInstance())
{
ThunderBirdReminderView::GetInstance()->HideAll();
}
- ThunderBirdModel::GetInstance()->HighFrequence();//恢复视频帧率
- ThunderBirdModel::GetInstance()->OnExitDialogueMode();
}
//当为故事模式