修复聆听中播放上一次对话bug
authorxue <2144439972@qq.com>
Fri, 28 Nov 2025 04:17:40 +0000 (12:17 +0800)
committerxue <2144439972@qq.com>
Fri, 28 Nov 2025 04:17:40 +0000 (12:17 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdDialogueView.h
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdDialogueView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp

index 2838f1c..58da7ef 100644 (file)
@@ -135,6 +135,12 @@ namespace OHOS
         void Isband(bool);
         void dialogue_first();
         bool DialogueFirst{true};
+        //判断是否为正常结束
+        bool IsNormalEnd{false};
+        //判断是否为打断对话
+        bool IsInterrupted{false};
+        //判断是否需要重连对话
+        bool IsReconnect{false};
         enum : int16_t {
             THUNDERBIRD_DIALOGUEVIEW_SPEAKING = 0,     // 说话中
             THUNDERBIRD_DIALOGUEVIEW_LISTENING,        // 聆听中
index 21b0886..396e626 100644 (file)
@@ -261,8 +261,7 @@ namespace OHOS
     void ThunderBirdDialogueView::AudioPlaybackEnd()
     {
         if(!TextLabel) return;
-        //TextLabel->SetText("还有什么想聊的吗?");
-        //TextLabel_Y->SetText("还有什么想聊的吗?");
+        TextLabel->SetText("还有什么想聊的吗?");
         if(speakAnimator) {speakAnimator->Stop();}
     }
 
index 2e44a37..c85fe0a 100644 (file)
@@ -59,6 +59,11 @@ extern "C" {
 #include "cat1_server.h"
 #include "cat1_pub_api.h"
 #include "cat1_types.h"
+#endif
+#ifdef SUPPORT_PPP_SERVICE
+#include "ppp_api.h"
+#include "ppp_cat1_api.h"
+#include "ppp_at_handler.h"
 #endif
  #define JUHEPINGTAI 0
  #if JUHEPINGTAI
@@ -97,7 +102,7 @@ extern "C" {
       * @brief CAT1消息回调函数,处理AT命令响应
       * @note 用于处理MESSAGE_4G_AT_RECEIVED消息,解析+CESQ响应
       */
-     #ifdef SUPPORT_CAT1_SERVICE
+     #if defined(SUPPORT_CAT1_SERVICE) || defined(SUPPORT_PPP_SERVICE)
      extern "C" {
      #endif
      static errcode_t ThunderBirdModel_Cat1MsgCallback(MESSAGE_4G_T msg, void *msg_buf, uint16_t msglen)
@@ -136,7 +141,7 @@ extern "C" {
          }
          return ERRCODE_SUCC;
      }
-     #ifdef SUPPORT_CAT1_SERVICE
+     #if defined(SUPPORT_CAT1_SERVICE) || defined(SUPPORT_PPP_SERVICE)
      }
      #endif
 
@@ -1687,6 +1692,9 @@ extern "C" {
                              currentSubView == ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_BIND_SUCCESS) {
                             if (bind_status == false) {
                                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "解绑警告界面超时,恢复出厂设置");
+                                AI_ForceInterrupt();
+                                ln_ws_send_voice_chat_interrupt("恢复出厂设置");
+                                do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
                                 restore_factory_settings();
                             } 
                             else {
@@ -1997,8 +2005,25 @@ extern "C" {
         cat1_at_cmd(cesq_cmd);
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel: AT+CESQ command sent via cat1_at_cmd");
         // 注意:m_rsrq和m_rsrp会在回调函数中更新,这里不设置默认值(保持上次的值)
+        #elif defined(SUPPORT_PPP_SERVICE)
+        // PPP模式下,使用ppp模块的指令获取信号强度
+        ppp_network_signal_info_t signal_info = {0};
+        ppp_error_t ret = ppp_at_get_network_signal_info(&signal_info);
+        if (ret == PPP_ERR_OK && signal_info.valid) {
+            // 更新RSRQ和RSRP值
+            m_rsrq = signal_info.rsrq;
+            m_rsrp = signal_info.rsrp;
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel: Network signal info updated via ppp_at_get_network_signal_info - RSRQ=%d, RSRP=%d", m_rsrq, m_rsrp);
+        } else {
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel: Failed to get network signal info via ppp_at_get_network_signal_info, ret=%d", ret);
+            // 如果获取失败,设置为无效值
+            m_rsrq = 255;
+            m_rsrp = 255;
+        }
+        // 同时调用ppp_get_network_signal_info()来更新运行时状态(用于日志输出)
+        ppp_get_network_signal_info();
         #else
-        // 如果没有CAT1服务,设置为无效值
+        // 如果没有CAT1服务和PPP服务,设置为无效值
         m_rsrq = 255;
         m_rsrp = 255;
         #endif
@@ -2702,12 +2727,12 @@ extern "C" {
             currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING &&
             m_dialogueModeFinished)
         {
-            ThunderBirdDialogueView::GetInstance()->UpdateDialogueText("还有什么想聊的吗?");
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 对话模式finished且音频播放结束");
             // 重置标志
             m_dialogueModeFinished = false;
             // 停止动效
             ThunderBirdDialogueView::GetInstance()->AudioPlaybackEnd();
+            ThunderBirdDialogueView::GetInstance()->IsNormalEnd = true;
             // 启动8秒定时器,时间到就退出对话
             StartCountUpTimer(10);
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 启动10秒定时器,时间到就退出对话");
@@ -2734,7 +2759,11 @@ extern "C" {
     void ThunderBirdModel::HandleAudioRecordingStart()
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioRecordingStart: 录音开始");
-        
+        if(ThunderBirdDialogueView::GetInstance()->IsNormalEnd == false)
+        {
+            //重连
+            // ln_ws_send_voice_chat_interrupt("重连对话");
+        }
         // 取消退出对话的定时器(用户开始录音,说明要继续对话)
         StopCountUpTimer();
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioRecordingStart: 取消退出对话定时器");
@@ -2746,11 +2775,17 @@ extern "C" {
             int16_t currentSubView = view->GetCurrentSubView();
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioRecordingStart: currentView=%d, currentSubView=%d", currentView, currentSubView);
             // 如果当前在对话界面,且不在聆听状态,则跳转到聆听状态
+            //如果是哄睡界面,则不进行处理
+            if(currentView == THUNDERBIRD_LULLABYVIEW && currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_3)
+            {
+                return;
+            }
             if ((currentView == THUNDERBIRD_DIALOGUEVIEW && 
                 currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING) 
                 || ThunderBirdDialogueView::GetInstance()->DialogueFirst == false) {
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "录音开始,跳转到聆听状态");
                 view->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
+                ThunderBirdDialogueView::GetInstance()->IsNormalEnd = false;
                 ThunderBirdDialogueView::GetInstance()->UpdateDialogueText("超认真聆听中");
             }
             // 如果当前在哄睡界面,且不在故事选择状态,则跳转到故事选择状态