增加进入对话指示灯
authorxue <2144439972@qq.com>
Fri, 12 Dec 2025 05:46:45 +0000 (13:46 +0800)
committerxue <2144439972@qq.com>
Fri, 12 Dec 2025 05:46:45 +0000 (13:46 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdDialogueView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdShutdownView.cpp

index cd07515..097112c 100644 (file)
@@ -220,7 +220,17 @@ namespace OHOS
         {
             ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
             // uapi_set_sleep_mode_active(false);//睡眠模式激活标志位
-            ThunderBirdModel::GetInstance()->HighFrequence();
+            //如果仍在对话,取消对话
+            if(ThunderBirdPresenter::GetInstance()->isDialogueing)
+            {
+                AI_ForceInterrupt();
+                ln_ws_send_voice_chat_interrupt("退出对话");
+                do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
+                ln_ws_end_audio_chat();//结束对话
+                ThunderBirdModel::GetInstance()->HighFrequence();
+                ThunderBirdModel::GetInstance()->OnExitDialogueMode();
+                ThunderBirdPresenter::GetInstance()->SetDialogueing(false);
+            }
             // 从ThunderBirdModel获取当前表情和状态文本
             std::string currentStatusText = "发呆中...     ";
             Isband(true);
index 6a7b663..8d4dd17 100644 (file)
@@ -3132,7 +3132,6 @@ extern "C" {
     {
         //用string来接收表情
         std::string emotionStr(emotion);
-        //return;//确保稳定性该版本不使用NPC表情变化
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleNpcEmotionChange: %s", emotionStr.c_str());
         
         if (emotionStr.empty()) {
index 5480c13..5d1b896 100644 (file)
@@ -225,32 +225,6 @@ namespace OHOS
                 //更新二维码
                 UpdateQrcodeIfValid();
             }
-            // //如果是在对话界面 需要根据对话状态去拿对话数据进行更新
-            // if(currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING)
-            // {
-            //     //每一个界面都需要判断是否存在
-            //     if(ThunderBirdDialogueView::GetInstance() != nullptr)
-            //     {
-            //         //判断是否为开始对话 如果是开始对话 则更新对话数据
-            //         // if(ThunderBirdModel::GetInstance()->GetConversationStatus() == 1){
-            //             //更新对话数据
-            //             std::string dialogueText = ThunderBirdModel::GetInstance()->GetTextStr();  
-            //             //只有一行 是拼接 还是直接覆盖?
-            //             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateDialogueText:%s\n",dialogueText.c_str());
-            //             ThunderBirdDialogueView::GetInstance()->UpdateDialogueText(dialogueText.c_str());
-                    
-            //     }
-            // }
-            // //如果是哄睡界面 需要更新哄睡文本
-            // if(currentView == THUNDERBIRD_LULLABYVIEW && currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4)
-            // {
-            //     if(ThunderBirdLullabyView::GetInstance() != nullptr)
-            //     {
-            //         std::string lullabyText = ThunderBirdModel::GetInstance()->GetTextStr();
-            //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateLullabyText:%s\n",lullabyText.c_str());
-            //         ThunderBirdLullabyView::GetInstance()->UpdateLullabyText(lullabyText.c_str());
-            //     }
-            // }
         }
     }
 
@@ -739,10 +713,18 @@ namespace OHOS
 
                     ThunderBirdMainView::GetInstance()->ChangeView(THUNDERBIRD_GUIDEVIEW, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
                     isDialogueing = true;
+                    //开启小绿点
+                    if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::GetInstance()->listenIcon) {
+                        ThunderBirdMainView::GetInstance()->listenIcon->SetVisible(true);
+                    }
                     //未绑定状态,联网隐藏网络断开提醒
                     // 开始对话
                     do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT_VAD_ENABLE, NULL, 0);
-                    // ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);
+                    // 进入对话模式时记录当前表情
+                    ThunderBirdModel::GetInstance()->OnEnterDialogueMode();
+                    // 获取对话体力与流量信息
+                    do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_GET_CHAT_STAMINA, NULL, 0);
+                    ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);
                     
                     break;
             }
@@ -1177,8 +1159,10 @@ namespace OHOS
                 //发送开始对话流标志
                 do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_CHAT_SESSION_START, NULL, 0);
                 #endif
-
-                
+                //开启小绿点
+                if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::GetInstance()->listenIcon) {
+                    ThunderBirdMainView::GetInstance()->listenIcon->SetVisible(true);
+                }
                 // 音频已初始化,直接跳转界面
                 ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
                 if(ThunderBirdDialogueView::GetInstance()->DialogueFirst == true)
index 7bce688..cf03a38 100644 (file)
@@ -37,12 +37,12 @@ namespace OHOS
     {
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdShutdownView::ThunderBirdShutdownView");
         g_tbShutdownView = this;
-          // 关机前释放 thunderbird 视频与相关资源
-          if (ThunderBirdMainView::GetInstance())
-          {
-            //   ThunderBirdMainView::GetInstance()->CloseVideo();
-            ThunderBirdMainView::GetInstance()->videoPlay_->StopVideoPlay();
-          }
+        // 关机前释放 thunderbird 视频与相关资源
+        ThunderBirdMainView *mainView = ThunderBirdMainView::GetInstance();
+        if (mainView != nullptr && mainView->videoPlay_ != nullptr)
+        {
+            mainView->videoPlay_->StopVideoPlay();
+        }
     }
 
     ThunderBirdShutdownView::~ThunderBirdShutdownView()
@@ -59,14 +59,16 @@ namespace OHOS
 
     void ThunderBirdShutdownView::ClearAll()
     {
+        // 先删除shutdownAnimator,不依赖group状态
+        if (shutdownAnimator != nullptr)
+        {
+            delete shutdownAnimator;
+            shutdownAnimator = nullptr;
+        }
+        
         if (group != nullptr)
         {
             group->RemoveAll();
-            if (shutdownAnimator != nullptr)
-            {
-                delete shutdownAnimator;
-                shutdownAnimator = nullptr;
-            }
             //FreeImagePathsArray(shutdownPathsArray, TB_SHUTDOWN_ANIM_FRAMES);
             delete group;
             group = nullptr;
@@ -125,6 +127,9 @@ namespace OHOS
         group->SetPosition(0, 0, 360, 360);
         if (!EnsureAnimator())
         {
+            // 修复:EnsureAnimator失败时删除已创建的group,避免内存泄漏
+            delete group;
+            group = nullptr;
             return nullptr;
         }
         group->Add(shutdownAnimator);