修复哄睡会触发vad对话的Bug
authorxue <2144439972@qq.com>
Wed, 19 Nov 2025 07:32:51 +0000 (15:32 +0800)
committerxue <2144439972@qq.com>
Wed, 19 Nov 2025 07:32:51 +0000 (15:32 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdLullabyView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp

index 661c1f4..28c114b 100644 (file)
@@ -365,6 +365,15 @@ namespace OHOS
             ThunderBirdModel::GetInstance()->LowFrequence();//减低视频帧率
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdLullabyView::Show: THUNDERBIRD_LULLABYVIEW_4");
             
+            // 进入故事模式时关闭VAD
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "进入故事模式,关闭VAD");
+            int vad_ret = ln_ws_disable_vad_server();
+            if (vad_ret == 0) {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "VAD已成功关闭");
+            } else {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "关闭VAD失败: %d", vad_ret);
+            }
+            
             // 检查是否在对话模式
             ThunderBirdPresenter *presenter = ThunderBirdPresenter::GetInstance();
             if(presenter && presenter->isDialogueing)
index e5972a1..b073217 100644 (file)
                     int16_t currentView = view->GetCurrentView();
                     int16_t currentSubView = view->GetCurrentSubView();
                     
-                    // 检查是否是聆听界面超时,需要自动跳转到说话界面
+                    // 检查是否是聆听界面超时,需要自动跳转到状态界面
                     if (currentView == THUNDERBIRD_DIALOGUEVIEW && 
                         currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING) {
                         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "聆听界面超时,自动跳转到说话界面");
-                        view->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING);
-                        ln_ws_end_audio_chat();
+                        view->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();
                     }
                     //检查是否是播放界面超时,需要自动跳转到状态界面
                     else if (currentView == THUNDERBIRD_DIALOGUEVIEW && 
         // 重置故事模式finished标志
         m_storyModeFinished = false;
         
+        // 退出故事模式时重新启用VAD
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "退出故事模式,重新启用VAD");
+        int vad_ret = ln_ws_enable_vad_server();
+        if (vad_ret == 0) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "VAD已成功启用");
+        } else {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "启用VAD失败: %d", vad_ret);
+        }
+        
         if (ThunderBirdMainView::GetInstance()) {
             int currentView = ThunderBirdMainView::GetInstance()->GetCurrentView(); //获取当前视图
             ln_ws_audio_deinit();//功耗优化