优化退出对话死机
authorxue <2144439972@qq.com>
Fri, 26 Dec 2025 02:04:09 +0000 (10:04 +0800)
committerxue <2144439972@qq.com>
Fri, 26 Dec 2025 02:04:09 +0000 (10:04 +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

index d27dca4..3986839 100644 (file)
@@ -187,8 +187,6 @@ namespace OHOS
         {
         case THUNDERBIRD_DIALOGUEVIEW_SPEAKING:
         {
-            ThunderBirdModel::GetInstance()->LowFrequence();//减低视频帧率
-            ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
             if (TextLabel)
             {
                 TextLabel->SetPosition(37, 66, 325, 42);
@@ -211,7 +209,6 @@ namespace OHOS
         }
         case THUNDERBIRD_DIALOGUEVIEW_LISTENING:
         {
-            ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
             if (TextLabel)
             {
                 TextLabel->SetPosition(111, 64, 180, 42);
@@ -231,7 +228,6 @@ namespace OHOS
         }
         case THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW:
         {
-            ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
             ThunderBirdModel::GetInstance()->HighFrequence();//恢复视频帧率
             // uapi_set_sleep_mode_active(false);//睡眠模式激活标志位
             //如果仍在对话,取消对话
index 10e2ab0..08187ab 100644 (file)
@@ -1782,6 +1782,7 @@ extern "C" {
                     if (currentView == THUNDERBIRD_DIALOGUEVIEW && 
                         (currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING || currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING)) {
                         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "聆听/说话界面超时,自动跳转并退出对话");
+                        ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
                         if(bind_status == true)
                         {
                             view->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
@@ -2837,8 +2838,6 @@ extern "C" {
     void ThunderBirdModel::HandleSleepModeEnd()
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleSleepModeEnd");
-        //关闭常亮屏
-        ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
         // 停止故事模式超时定时器
         StopStoryModeTimeoutTimer();
         // 重置故事模式finished标志
index 8ffce1d..0838dca 100644 (file)
@@ -812,7 +812,7 @@ namespace OHOS
                 ln_ws_send_voice_chat_interrupt("退出哄睡");
                 do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
                 ThunderBirdModel::GetInstance()->HighFrequence();//恢复视频帧率
-                ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); // 关闭屏幕常亮
+                // ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); // 关闭屏幕常亮
                 // ThunderBirdModel::GetInstance()->g_sleep_mode_active = false;//睡眠模式激活标志位
                 ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
                 break;
@@ -1203,7 +1203,8 @@ namespace OHOS
                     ThunderBirdDialogueView::GetInstance()->Isband(true);
                 }    
                 isDialogueing = true;
-                ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 打开屏幕常亮
+                ThunderBirdModel::GetInstance()->LowFrequence();//减低视频帧率
+                ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
                 // 进入对话模式时记录当前表情
                 ThunderBirdModel::GetInstance()->OnEnterDialogueMode();
                 // 获取对话体力与流量信息
@@ -1218,6 +1219,7 @@ namespace OHOS
             {
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "退出对话模式,当前子状态: %d", currentSubView);
 
+                ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
                 #if LN_VOICE_CHAT_ENABLED
                 //发送结束对话流标志
                 do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_CHAT_SESSION_END, NULL, 0);
@@ -1228,7 +1230,8 @@ namespace OHOS
                 {
                     ThunderBirdModel::GetInstance()->StopCountUpTimer();
                 }
-                
+                ln_ws_end_audio_chat();//结束对话
+
                 // 停止实际的音频播放
                 // ai_media_play_stop();
                 ThunderBirdDialogueView::GetInstance()->DialogueFirst = true;
@@ -1240,20 +1243,14 @@ namespace OHOS
                 // 退出对话模式,执行清理
                 ThunderBirdModel::GetInstance()->OnExitDialogueMode();
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdPresenter::HandleFuncKeyLongPress: Stopped AI audio playback");
-                
+                // 先设置退出标志,防止录音结束回调误判为正常录音结束
+                isDialogueing = false;
                 // 等待视频切换完成,避免在视频切换过程中退出导致资源冲突
                 if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::IsSwitchingVideo()) {
                     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdPresenter::HandleFuncKeyLongPress: 等待视频切换完成");
                     ThunderBirdMainView::WaitForVideoSwitchComplete(2000);
                 }
-                
-                // 先设置退出标志,防止录音结束回调误判为正常录音结束
-                isDialogueing = false;
-                
-                ln_ws_end_audio_chat();//结束对话
-                
-
-                
+            
                 // 检查绑定状态,如果未绑定则跳转到 THUNDERBIRD_GUIDEVIEW_5
                 if (!ThunderBirdModel::GetInstance()->getbind_status()) {
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "设备未绑定,跳转到 THUNDERBIRD_GUIDEVIEW_5");