增加对话功耗优化,弹窗自动退出
authorxue <2144439972@qq.com>
Thu, 16 Oct 2025 09:20:58 +0000 (17:20 +0800)
committerxue <2144439972@qq.com>
Thu, 16 Oct 2025 09:20:58 +0000 (17:20 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdAdjustView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdDialogueView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdLullabyView.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/ThunderBirdReminderView.cpp

index a45361b..ce4f6ae 100644 (file)
@@ -160,6 +160,7 @@ namespace OHOS
         {
         case THUNDERBIRD_ADJUSTVIEW_BIND_SUCCESS:
         {
+            ThunderBirdModel::GetInstance()->StartCountUpTimer(5);
             if (TextLabel)
             {
                 TextLabel->SetPosition(142, 148, 120, 42);
@@ -191,6 +192,7 @@ namespace OHOS
             uapi_set_screen_on_api(); // 亮屏
             //振动提醒
             custom_VibratorFunc_int(0);
+            ThunderBirdModel::GetInstance()->StartCountUpTimer(5);
             if (TextLabel)
             {
                 TextLabel->SetPosition(112, 148, 248, 42);
index 30f7f15..ccf2a1c 100644 (file)
@@ -122,7 +122,7 @@ namespace OHOS
             TextLabel_Y->SetStyle(STYLE_TEXT_COLOR, 0xff000000);
             TextLabel_Y->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
             TextLabel_Y->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); 
-            TextLabel_Y->SetRollSpeed(55);
+            TextLabel_Y->SetRollSpeed(75);
             TextLabel_Y->SetVisible(false);
             group->Add(TextLabel_Y);
         }
@@ -132,7 +132,7 @@ namespace OHOS
             TextLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
             TextLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
             TextLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); 
-            TextLabel->SetRollSpeed(55);
+            TextLabel->SetRollSpeed(75);
             TextLabel->SetVisible(false);
             group->Add(TextLabel);
         }
index 15368ba..e73f2d2 100644 (file)
@@ -363,7 +363,7 @@ namespace OHOS
             {
                 TextLabel->SetPosition(0, 64, 360, 42);
                 TextLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); 
-                TextLabel->SetRollSpeed(35); 
+                TextLabel->SetRollSpeed(55); 
                 TextLabel->SetVisible(true);
             }
             if (TextLabel_Y)
@@ -371,7 +371,7 @@ namespace OHOS
                 TextLabel_Y->SetPosition(2, 66, 360, 42);
                 TextLabel_Y->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE); 
                 TextLabel_Y->SetStyle(STYLE_TEXT_COLOR, 0xff000000);
-                TextLabel_Y->SetRollSpeed(35); 
+                TextLabel_Y->SetRollSpeed(55); 
                 TextLabel_Y->SetVisible(true);
             }
             break;
index 2ac2db9..0f55d87 100644 (file)
@@ -38,6 +38,7 @@
 #include "ln_api.h"
 #include <unistd.h>
 #include "vibrator_service.h"
+#include "ai_media.h"
  #define JUHEPINGTAI 0
  #if JUHEPINGTAI
  #include "websocket_server_manager.h"
      /*************************OTA升级*************************/
      int ThunderBirdModel::ota_update_boot()
      {
- 
           do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_OTA_GET_TASK, nullptr, 0);//获取是否需要OTA升级
          return -1;
      }
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::UpdateOtaStatus: %d", status);
         m_otaStatus = status;
         // 更新状态检查
-        if(status == 1 || status == 2 || status == 3)//OTA升级
+        if(status == 1 || status == 2)//OTA升级
         {
             SetViewModel();
             //do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_WS_ENTER_SLEEP, NULL, 0);
+            AI_ForceInterrupt();
+            ln_ws_send_voice_chat_interrupt("进入OTA");
             NativeAbility::GetInstance().ChangeSlice(VIEW_OTA);
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "进入OTA");
         }
             // 不入队,避免重复显示
         } else {
             // 非第一个文本,加入队列等待音频开始播放时同步出队
-            EnqueueAudioText(textId);
+            std::string textStr(textId);
+            EnqueueAudioText(textStr);
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "文本入队,等待音频开始播放: %s", textId);
         }
      }
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测到夜间更新已启用,切换到OTA slice");
                     // 切换到OTA slice
                     //do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_WS_ENTER_SLEEP, NULL, 0);
+                    AI_ForceInterrupt();
+                    ln_ws_send_voice_chat_interrupt("切换slice");
                     NativeAbility::GetInstance().ChangeSlice(VIEW_OTA);
                 }
             }
                 m_countUpActive = false;
                 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Count up timer completed: %d/%d", m_countUpValue, m_countUpTarget);
                 
-                // æ£\80æ\9f¥æ\98¯å\90¦æ\98¯è\81\86å\90¬ç\95\8cé\9d¢è¶\85æ\97¶ï¼\8cé\9c\80è¦\81è\87ªå\8a¨è·³è½¬å\88°è¯´è¯\9dç\95\8cé\9d¢
+                // æ ¹æ\8d®å½\93å\89\8dç\95\8cé\9d¢è¿\9bè¡\8cä¸\8då\90\8cç\9a\84å¤\84ç\90\86
                 ThunderBirdMainView *view = ThunderBirdMainView::GetInstance();
                 if (view) {
                     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();
                     }
+                    // 检查是否是绑定成功界面,需要跳转到对话界面
+                    else if (currentView == THUNDERBIRD_ADJUSTVIEW && 
+                             currentSubView == ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_BIND_SUCCESS) {
+                        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "绑定成功界面超时,跳转到对话界面");
+                        ThunderBirdModel::GetInstance()->ota_update_boot(); // 绑定成功后获取ota升级任务
+                        view->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
+                    }
+                    // 检查是否是警告界面,需要返回原任务
+                    else if (currentView == THUNDERBIRD_ADJUSTVIEW && 
+                             currentSubView == ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_WARNING) {
+                        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "警告界面超时,返回原任务");
+                        view->GoBackToPreviousView();
+                    }
+                    // 检查是否是任务提醒界面,需要返回原任务
+                    else if (currentView == THUNDERBIRD_REMINDERVIEW && 
+                             currentSubView == ThunderBirdReminderView::THUNDERBIRD_REMINDERVIEW_TASK_REMINDER) {
+                        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "任务提醒界面超时,返回原任务");
+                        ThunderBirdModel::GetInstance()->HighFrequence();
+                        view->GoBackToPreviousView();
+                    }
                 }
             } else {
                 // 增加计数值
         if (ThunderBirdMainView::GetInstance()) {
             int currentView = ThunderBirdMainView::GetInstance()->GetCurrentView(); //获取当前视图
             ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_LULLABYVIEW, ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4);
+            //清空文本队列
+            ClearAudioTextQueue();
+            ln_ws_audio_init();//功耗优化
         } else {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView instance is null, cannot start sleep mode");
         }
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleSleepModeEnd");
         if (ThunderBirdMainView::GetInstance()) {
             int currentView = ThunderBirdMainView::GetInstance()->GetCurrentView(); //获取当前视图
+            ln_ws_audio_deinit();//功耗优化
             ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_LULLABYVIEW, ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_5);
         } else {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView instance is null, cannot end sleep mode");
         {
         int currentView = ThunderBirdMainView::GetInstance()->GetCurrentView();
         int currentSubView = ThunderBirdMainView::GetInstance()->GetCurrentSubView();
-        if(currentSubView != ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_WARNING && currentSubView != ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_NETWORK_CONNECTING)
+        if(currentSubView == ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_WARNING && currentSubView == ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_NETWORK_CONNECTING)
+        {
+            ThunderBirdAdjustView::GetInstance()->UpdateTaskReminderText(message);
+        }
+        else
         {
             ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_ADJUSTVIEW, ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_WARNING);
-            if (ThunderBirdAdjustView::GetInstance()) {
-                ThunderBirdAdjustView::GetInstance()->UpdateTaskReminderText(message);
-            }
+            ThunderBirdAdjustView::GetInstance()->UpdateTaskReminderText(message);
         }
     }
   }
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleDownloadFile");
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Download type: %d", type);
-        
+        if(ThunderBirdModel::GetOtaStatus() != 0)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleDownloadFile: OTA正在升级,跳过下载");
+            return;
+        }
         // 根据下载类型进行不同的处理
         switch (type) {
             case DOWNLOAD_FILE_TYPE_SCREEN_IMAGE: // 屏保下载
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleDownloadFile: Starting emoji download");
                 // 这里可以添加表情下载的具体逻辑
+                do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_DOWNLOAD_SCREEN_IMAGE, NULL, 0);
                 break;
             case DOWNLOAD_FILE_TYPE_EMOJI: // 表情下载
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleDownloadFile: Starting hair download");
                 // 这里可以添加发型下载的具体逻辑
+                do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_DOWNLOAD_EMOJI, NULL, 0);
                 break;
             default:
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleDownloadFile: Unknown download type: %d", type);
         //跳转到OTA下载界
         downloadFileType = type;
         //do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_WS_ENTER_SLEEP, NULL, 0);
+        AI_ForceInterrupt();
+        ln_ws_send_voice_chat_interrupt("开始下载");
         NativeAbility::GetInstance().ChangeSlice(VIEW_OTA);
     }
 
index ae8b361..7157c30 100644 (file)
@@ -564,6 +564,7 @@ namespace OHOS
             //通知界面-关闭通知
             case ThunderBirdReminderView::THUNDERBIRD_REMINDERVIEW_TASK_REMINDER://事项提醒界面-关闭通知
                 //回原界面
+                ThunderBirdModel::GetInstance()->StopCountUpTimer(); // 手动跳转时关闭定时器
                 ThunderBirdModel::GetInstance()->HighFrequence();
                 ThunderBirdMainView::GetInstance()->GoBackToPreviousView();
                 break;
@@ -594,6 +595,7 @@ namespace OHOS
         {
         switch (currentSubView) {
             case ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_BIND_SUCCESS:
+                ThunderBirdModel::GetInstance()->StopCountUpTimer(); // 手动跳转时关闭定时器
                 ThunderBirdModel::GetInstance()->ota_update_boot();//绑定成功后获取ota升级任务
                 ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
                 break;
@@ -606,6 +608,7 @@ namespace OHOS
         {
             switch (currentSubView) {
                 case ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_WARNING://退出返回原任务
+                    ThunderBirdModel::GetInstance()->StopCountUpTimer(); // 手动跳转时关闭定时器
                     ThunderBirdMainView::GetInstance()->GoBackToPreviousView();
                     break;
             }
@@ -658,6 +661,7 @@ namespace OHOS
                 // 进入对话模式时记录当前表情
                 ThunderBirdModel::GetInstance()->OnEnterDialogueMode();
                 ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);//开始对话
+                ln_ws_audio_init();//功耗优化
             }
             else if(currentView == THUNDERBIRD_DIALOGUEVIEW)
             {
@@ -666,6 +670,7 @@ namespace OHOS
                 // ai_media_play_stop();
                 // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdDialogueView::AudioPlaybackEnd: Stopped audio playback");
                 ln_ws_end_audio_chat();//结束对话
+                ln_ws_audio_deinit();//功耗优化
                 // 退出对话模式时恢复表情
                 AI_ForceInterrupt();
                 ln_ws_send_voice_chat_interrupt("退出对话");
index 59e8fcd..8ff2af7 100644 (file)
@@ -149,6 +149,7 @@ namespace OHOS
         case THUNDERBIRD_REMINDERVIEW_TASK_REMINDER:
         {
             ThunderBirdModel::GetInstance()->LowFrequence();
+            ThunderBirdModel::GetInstance()->StartCountUpTimer(10);
             if (RemindIcon)
             {
                 // 图标位置:整体居中的左侧