优化退出对话逻辑(补)
authorxue <2144439972@qq.com>
Tue, 23 Dec 2025 09:14:06 +0000 (17:14 +0800)
committerxue <2144439972@qq.com>
Tue, 23 Dec 2025 09:14:06 +0000 (17:14 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp

index dd2db7d..585682b 100644 (file)
@@ -1217,29 +1217,47 @@ namespace OHOS
                 // ai_media_play_stop();
                 ThunderBirdDialogueView::GetInstance()->DialogueFirst = true;
                 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdPresenter::HandleFuncKeyLongPress: Stopped AI audio playback");
+                
+                // 等待视频切换完成,避免在视频切换过程中退出导致资源冲突
+                if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::IsSwitchingVideo()) {
+                    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdPresenter::HandleFuncKeyLongPress: 等待视频切换完成");
+                    ThunderBirdMainView::WaitForVideoSwitchComplete(2000);
+                }
+                
                 ln_ws_end_audio_chat();//结束对话
                 
                 // 退出对话模式时恢复表情
                 AI_ForceInterrupt();
                 ln_ws_send_voice_chat_interrupt("退出对话");
-                do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
                 isDialogueing = false;
                 ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); // 关闭屏幕常亮
-                // DialogueingFlag = false;
+                ThunderBirdModel::GetInstance()->HighFrequence();//恢复视频帧率
+                
+                // 如果从STATUS_SHOW退出,ChangeView不会触发退出逻辑(因为条件不满足),需要手动调用
+                // 如果从LISTENING或SPEAKING退出,ChangeView会处理退出逻辑,这里不需要重复调用
+                bool needManualExit = (currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
                 
                 // 检查绑定状态,如果未绑定则跳转到 THUNDERBIRD_GUIDEVIEW_5
                 if (!ThunderBirdModel::GetInstance()->getbind_status()) {
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "设备未绑定,跳转到 THUNDERBIRD_GUIDEVIEW_5");
+                    if (needManualExit) {
+                        ThunderBirdModel::GetInstance()->OnExitDialogueMode();
+                        do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
+                    }
                     ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_GUIDEVIEW, ThunderBirdGuideView::THUNDERBIRD_GUIDEVIEW_5);
                 } else {
+                    if (needManualExit) {
+                        ThunderBirdModel::GetInstance()->OnExitDialogueMode();
+                        do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
+                    }
                     ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
                 }
+                
+                // 隐藏提醒视图
                 if(ThunderBirdReminderView::GetInstance())
                 {
                     ThunderBirdReminderView::GetInstance()->HideAll();
                 }
-                 ThunderBirdModel::GetInstance()->HighFrequence();//恢复视频帧率
-                 ThunderBirdModel::GetInstance()->OnExitDialogueMode();
                 
             }
             //当为故事模式