修复蓝牙界面切换其他界面bug
authorxue <2144439972@qq.com>
Wed, 14 Jan 2026 03:51:06 +0000 (11:51 +0800)
committerxue <2144439972@qq.com>
Wed, 14 Jan 2026 03:51:06 +0000 (11:51 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp

index 06a9233..eeadcd3 100644 (file)
@@ -234,6 +234,7 @@ namespace OHOS
         // 哄睡模式处理函数
         void HandleSleepModeStart(const char* theme, int is_intention_result);
         void HandleSleepModeEnd();
+        void HandleSleepModeEnd_BlueView();
         void HandleBindAndUnbind(int is_bind);
         
         // 处理故事响应消息的finished标志
index bc58fd1..578dc7c 100644 (file)
@@ -1168,7 +1168,7 @@ namespace OHOS
             
             if(hideView == THUNDERBIRD_LULLABYVIEW)
             {
-                ThunderBirdModel::GetInstance()->HandleSleepModeEnd();
+                ThunderBirdModel::GetInstance()->HandleSleepModeEnd_BlueView();
             }
             else if(hideView == THUNDERBIRD_DIALOGUEVIEW && (currentSubView_ == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING || currentSubView_ == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING))
             {
index cfce431..87e2058 100644 (file)
@@ -2952,24 +2952,6 @@ extern "C" {
         
         if (ThunderBirdMainView::GetInstance()) {
             int currentView = ThunderBirdMainView::GetInstance()->GetCurrentView(); //获取当前视图
-            
-            // 如果当前视图已经是蓝牙界面,说明是从蓝牙连接触发的退出,不需要再切换到对话界面
-            if (currentView == THUNDERBIRD_BLUEVIEW) {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleSleepModeEnd: 当前已在蓝牙界面,跳过切换到对话界面");
-                // 退出哄睡模式时恢复时间线表情
-                OnExitLullabyMode();
-                if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::GetInstance()->listenIcon) {
-                    ThunderBirdMainView::GetInstance()->listenIcon->SetVisible(false);
-                }
-                //直接退出到状态显示界面
-                AI_ForceInterrupt();
-                ln_ws_send_voice_chat_interrupt("退出哄睡");
-                //推送结束故事消息
-                do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_STORY_FINISH, NULL, 0);
-                do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
-                return;
-            }
-            
             // 退出哄睡模式时恢复时间线表情
             OnExitLullabyMode();
             if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::GetInstance()->listenIcon) {
@@ -2986,6 +2968,38 @@ extern "C" {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView instance is null, cannot end sleep mode");
         }
     }
+
+    void ThunderBirdModel::HandleSleepModeEnd_BlueView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleSleepModeEnd");
+        // 停止故事模式超时定时器
+        StopStoryModeTimeoutTimer();
+        // 重置故事模式finished标志
+        m_storyModeFinished = false;
+        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 (currentView == THUNDERBIRD_BLUEVIEW) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleSleepModeEnd: 当前已在蓝牙界面,跳过切换到对话界面");
+            // 退出哄睡模式时恢复时间线表情
+            OnExitLullabyMode();
+            if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::GetInstance()->listenIcon) {
+                ThunderBirdMainView::GetInstance()->listenIcon->SetVisible(false);
+            }
+            //直接退出到状态显示界面
+            AI_ForceInterrupt();
+            ln_ws_send_voice_chat_interrupt("退出哄睡");
+            //推送结束故事消息
+            do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_STORY_FINISH, NULL, 0);
+            do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
+    }
     
     void ThunderBirdModel::HandleStoryResponseFinished(bool finished)
     {