增加对话哄睡与日程提醒优先级逻辑
authorxue <2144439972@qq.com>
Fri, 28 Nov 2025 10:02:23 +0000 (18:02 +0800)
committerxue <2144439972@qq.com>
Fri, 28 Nov 2025 10:02:23 +0000 (18:02 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp

index e953892..8f8cb5e 100644 (file)
@@ -17,6 +17,7 @@
  #include "thunderbird/include/ThunderBirdModel.h"
  #include "thunderbird/include/ThunderBirdReminderView.h"
  #include "thunderbird/include/ThunderBirdLullabyView.h"
+ #include "thunderbird/include/ThunderBirdDialogueView.h"
  #include "thunderbird/include/ThunderBirdMainView.h"
  #include "thunderbird/include/ThunderBirdBlueView.h"
  #include "thunderbird/include/ThunderBirdPresenter.h"
@@ -73,7 +74,7 @@ extern "C" {
  //最低视频帧率
  #define LOW_FREQUENCE 20
  //最高视频帧率
- #define HIGH_FREQUENCE 50
+ #define HIGH_FREQUENCE 60
  namespace OHOS
  {
      enum OTA_STATUS
@@ -2131,6 +2132,55 @@ extern "C" {
             if (ThunderBirdMainView::GetInstance()) {
                 int currentView = ThunderBirdMainView::GetInstance()->GetCurrentView();
                 int currentSubView = ThunderBirdMainView::GetInstance()->GetCurrentSubView();
+                
+                // 如果当前在对话界面,需要先打断语音并退出对话模式
+                if (currentView == THUNDERBIRD_DIALOGUEVIEW && 
+                    (currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING ||
+                     currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING)) {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleScheduleReminder: 在对话界面,先打断语音并退出对话模式");
+                    // 打断语音播放
+                    AI_ForceInterrupt();
+                    ln_ws_send_voice_chat_interrupt("日程提醒");
+                    ln_ws_end_audio_chat();//结束对话
+                    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();
+                    // 退出到状态界面
+                    // ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
+                    ThunderBirdDialogueView::GetInstance()->DialogueFirst = true;
+                    // 更新当前视图和子视图
+                    // currentView = THUNDERBIRD_DIALOGUEVIEW;
+                    // currentSubView = ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW;
+                }
+                // 如果当前在哄睡界面,需要先打断语音并退出哄睡模式
+                else if (currentView == THUNDERBIRD_LULLABYVIEW && 
+                         currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4) {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleScheduleReminder: 在哄睡界面,先打断语音并退出哄睡模式");
+                    // 打断语音播放
+                    AI_ForceInterrupt();
+                    ln_ws_send_voice_chat_interrupt("日程提醒");
+                    //推送结束故事消息
+                    do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_STORY_FINISH, NULL, 0);
+                    ln_ws_audio_deinit();//功耗优化
+                    // 重置故事模式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);
+                    }
+                    // 退出到对话状态界面
+                    // ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
+                    // 更新当前视图和子视图
+                    // currentView = THUNDERBIRD_DIALOGUEVIEW;
+                    // currentSubView = ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW;
+                }
+                
                 //如果当前界面是事项提醒界面,则不进行切换,防止返回原任务进入循环
                 if(currentView != THUNDERBIRD_REMINDERVIEW && currentSubView != ThunderBirdReminderView::THUNDERBIRD_REMINDERVIEW_TASK_REMINDER)
                 {